@appcorp/shadcn 1.2.0 → 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.
- package/components/app-sidebar.js +16 -23
- package/components/audio.js +11 -19
- package/components/dashboard.js +27 -65
- package/components/drawer-generic.js +20 -28
- package/components/enhanced-checkbox.js +10 -57
- package/components/enhanced-combobox.js +99 -143
- package/components/enhanced-drawer-footer.js +22 -31
- package/components/enhanced-drawer-header.js +6 -14
- package/components/enhanced-dropzone-impl.d.ts +32 -0
- package/components/enhanced-dropzone-impl.js +218 -0
- package/components/enhanced-dropzone.d.ts +2 -63
- package/components/enhanced-dropzone.js +6 -294
- package/components/enhanced-input.js +10 -57
- package/components/enhanced-label.js +6 -52
- package/components/enhanced-radio.js +12 -20
- package/components/enhanced-select.js +13 -61
- package/components/enhanced-slider.js +11 -58
- package/components/enhanced-switch.js +11 -58
- package/components/enhanced-table-footer-action.js +11 -19
- package/components/enhanced-table-footer-page.js +16 -24
- package/components/enhanced-table-footer-pagination.js +11 -21
- package/components/enhanced-table-header-action.js +22 -30
- package/components/enhanced-table-header-search.js +9 -17
- package/components/enhanced-table.js +125 -153
- package/components/enhanced-textarea.js +10 -57
- package/components/field.d.ts +1 -1
- package/components/field.js +31 -88
- package/components/image-resize-dialog.js +61 -159
- package/components/nav-main.js +32 -78
- package/components/nav-projects.js +37 -48
- package/components/nav-user.js +41 -51
- package/components/show-toast.js +5 -9
- package/components/sidebar.d.ts +1 -1
- package/components/sidebar.js +115 -184
- package/components/team-switcher.js +36 -47
- package/components/theme-provider.js +36 -84
- package/components/timeline.js +12 -20
- package/components/tooltip.js +10 -59
- package/components/ui/accordion.js +17 -67
- package/components/ui/alert-dialog.js +32 -89
- package/components/ui/alert.d.ts +1 -1
- package/components/ui/alert.js +14 -63
- package/components/ui/area-chart-v1-impl.d.ts +19 -0
- package/components/ui/area-chart-v1-impl.js +75 -0
- package/components/ui/area-chart-v1.d.ts +2 -19
- package/components/ui/area-chart-v1.js +4 -113
- package/components/ui/aspect-ratio.js +3 -39
- package/components/ui/avatar.js +13 -62
- package/components/ui/badge.d.ts +2 -2
- package/components/ui/badge.js +7 -55
- package/components/ui/breadcrumb.js +27 -80
- package/components/ui/button.d.ts +2 -2
- package/components/ui/button.js +10 -58
- package/components/ui/calendar-impl.d.ts +8 -0
- package/components/ui/calendar-impl.js +55 -0
- package/components/ui/calendar.d.ts +2 -8
- package/components/ui/calendar.js +5 -108
- package/components/ui/card.js +21 -73
- package/components/ui/carousel-impl.d.ts +18 -0
- package/components/ui/carousel-impl.js +117 -0
- package/components/ui/carousel.d.ts +6 -18
- package/components/ui/carousel.js +8 -170
- package/components/ui/chart-impl.d.ts +62 -0
- package/components/ui/chart-impl.js +162 -0
- package/components/ui/chart.d.ts +7 -62
- package/components/ui/chart.js +9 -219
- package/components/ui/checkbox.js +10 -57
- package/components/ui/collapsible.js +5 -43
- package/components/ui/combobox.js +22 -58
- package/components/ui/command-impl.d.ts +80 -0
- package/components/ui/command-impl.js +63 -0
- package/components/ui/command.d.ts +9 -80
- package/components/ui/command.js +12 -117
- package/components/ui/context-menu.js +41 -102
- package/components/ui/dialog.js +28 -84
- package/components/ui/drawer-impl.d.ts +22 -0
- package/components/ui/drawer-impl.js +56 -0
- package/components/ui/drawer.d.ts +10 -22
- package/components/ui/drawer.js +13 -111
- package/components/ui/dropdown-menu.js +41 -102
- package/components/ui/form.d.ts +4 -2
- package/components/ui/form.js +41 -95
- package/components/ui/hover-card.js +9 -58
- package/components/ui/input-otp-impl.d.ts +34 -0
- package/components/ui/input-otp-impl.js +43 -0
- package/components/ui/input-otp.d.ts +4 -34
- package/components/ui/input-otp.js +7 -92
- package/components/ui/input.js +6 -53
- package/components/ui/label.d.ts +1 -1
- package/components/ui/label.js +9 -56
- package/components/ui/language-selector.js +17 -55
- package/components/ui/menubar.js +46 -108
- package/components/ui/navigation-menu.d.ts +1 -1
- package/components/ui/navigation-menu.js +29 -84
- package/components/ui/pagination.js +30 -83
- package/components/ui/popover.js +10 -60
- package/components/ui/progress.js +8 -55
- package/components/ui/radio-group.js +12 -60
- package/components/ui/resizable-impl.d.ts +24 -0
- package/components/ui/resizable-impl.js +27 -0
- package/components/ui/resizable.d.ts +3 -24
- package/components/ui/resizable.js +6 -78
- package/components/ui/scroll-area.js +10 -58
- package/components/ui/select.js +34 -90
- package/components/ui/separator.js +7 -54
- package/components/ui/sheet.d.ts +1 -1
- package/components/ui/sheet.js +30 -86
- package/components/ui/skeleton.js +5 -21
- package/components/ui/slider.js +10 -57
- package/components/ui/sonner.js +7 -24
- package/components/ui/switch.js +8 -55
- package/components/ui/table.js +27 -81
- package/components/ui/tabs.js +14 -64
- package/components/ui/textarea.js +6 -53
- package/components/ui/theme-switcher.js +41 -91
- package/components/ui/toggle.d.ts +2 -2
- package/components/ui/toggle.js +9 -57
- package/data/admin-dashboard.js +16 -19
- package/hooks/use-enhanced-combobox.js +47 -124
- package/hooks/use-mobile.js +8 -44
- package/hooks/use-outside-click.js +6 -10
- package/lib/themes.js +1 -4
- package/lib/toast-utils.js +78 -120
- package/lib/utils.js +4 -11
- package/package.json +9 -90
- package/utils/transform-breadcrumbs.js +4 -8
- package/utils/transform-navitems.js +7 -22
- package/components/aceternity-ui/apple-cards-carousel.d.ts +0 -35
- package/components/aceternity-ui/apple-cards-carousel.js +0 -263
- package/components/shadcn-example/ai-chat/chat-interface.d.ts +0 -11
- package/components/shadcn-example/ai-chat/chat-interface.js +0 -70
- package/components/shadcn-example/ai-chat/index.d.ts +0 -38
- package/components/shadcn-example/ai-chat/index.js +0 -66
- package/components/shadcn-example/ai-chat/sidebar.d.ts +0 -15
- package/components/shadcn-example/ai-chat/sidebar.js +0 -68
- package/components/shadcn-example/ai-chat/welcome-section.d.ts +0 -12
- package/components/shadcn-example/ai-chat/welcome-section.js +0 -26
- package/components/shadcn-example/authentication/index.d.ts +0 -24
- package/components/shadcn-example/authentication/index.js +0 -59
- package/components/shadcn-example/authentication/user-auth-form.d.ts +0 -11
- package/components/shadcn-example/authentication/user-auth-form.js +0 -54
- package/components/shadcn-example/blog-detail-page/comment-section.d.ts +0 -15
- package/components/shadcn-example/blog-detail-page/comment-section.js +0 -83
- package/components/shadcn-example/blog-detail-page/content.d.ts +0 -7
- package/components/shadcn-example/blog-detail-page/content.js +0 -15
- package/components/shadcn-example/blog-detail-page/header.d.ts +0 -11
- package/components/shadcn-example/blog-detail-page/header.js +0 -36
- package/components/shadcn-example/blog-detail-page/index.d.ts +0 -25
- package/components/shadcn-example/blog-detail-page/index.js +0 -74
- package/components/shadcn-example/blog-page/blog-post-card.d.ts +0 -13
- package/components/shadcn-example/blog-page/blog-post-card.js +0 -30
- package/components/shadcn-example/blog-page/featured-post-sidebar-item.d.ts +0 -10
- package/components/shadcn-example/blog-page/featured-post-sidebar-item.js +0 -19
- package/components/shadcn-example/blog-page/index.d.ts +0 -20
- package/components/shadcn-example/blog-page/index.js +0 -36
- package/components/shadcn-example/coming-soon/countdown.d.ts +0 -2
- package/components/shadcn-example/coming-soon/countdown.js +0 -82
- package/components/shadcn-example/coming-soon/index.d.ts +0 -10
- package/components/shadcn-example/coming-soon/index.js +0 -41
- package/components/shadcn-io/color-picker/index.d.ts +0 -43
- package/components/shadcn-io/color-picker/index.js +0 -304
- package/components/shadcn-io/copy-button/index.d.ts +0 -16
- package/components/shadcn-io/copy-button/index.js +0 -121
- package/components/shadcn-io/dropzone/index.d.ts +0 -19
- package/components/shadcn-io/dropzone/index.js +0 -131
- package/components/shadcn-io/gantt/index.d.ts +0 -145
- package/components/shadcn-io/gantt/index.js +0 -766
- package/components/shadcn-io/table/index.d.ts +0 -60
- package/components/shadcn-io/table/index.js +0 -138
- package/templates/appcorp-v1/footer/bottom-bar.d.ts +0 -6
- package/templates/appcorp-v1/footer/bottom-bar.js +0 -25
- package/templates/appcorp-v1/footer/cta.d.ts +0 -6
- package/templates/appcorp-v1/footer/cta.js +0 -21
- package/templates/appcorp-v1/footer/footer-grid.d.ts +0 -14
- package/templates/appcorp-v1/footer/footer-grid.js +0 -52
- package/templates/appcorp-v1/footer/index.d.ts +0 -3
- package/templates/appcorp-v1/footer/index.js +0 -28
- package/templates/appcorp-v1/footer/newsletter.d.ts +0 -11
- package/templates/appcorp-v1/footer/newsletter.js +0 -28
- package/templates/appcorp-v1/footer/stats.d.ts +0 -6
- package/templates/appcorp-v1/footer/stats.js +0 -15
- package/templates/appcorp-v1/header/announcement-bar.d.ts +0 -3
- package/templates/appcorp-v1/header/announcement-bar.js +0 -15
- package/templates/appcorp-v1/header/dropdown-panel.d.ts +0 -8
- package/templates/appcorp-v1/header/dropdown-panel.js +0 -72
- package/templates/appcorp-v1/header/index.d.ts +0 -12
- package/templates/appcorp-v1/header/index.js +0 -16
- package/templates/appcorp-v1/header/mobile-menu.d.ts +0 -14
- package/templates/appcorp-v1/header/mobile-menu.js +0 -101
- package/templates/appcorp-v1/header/navigation-bar.d.ts +0 -3
- package/templates/appcorp-v1/header/navigation-bar.js +0 -117
- package/templates/appcorp-v1/header/social-button.d.ts +0 -7
- package/templates/appcorp-v1/header/social-button.js +0 -48
- package/templates/appcorp-v1/home.d.ts +0 -3
- package/templates/appcorp-v1/home.js +0 -27
- package/templates/data/appcorp-v1.d.ts +0 -93
- package/templates/data/appcorp-v1.js +0 -348
- package/templates/data/edupilotpro-v1.d.ts +0 -33
- package/templates/data/edupilotpro-v1.js +0 -116
- package/templates/data/school-v1.d.ts +0 -328
- package/templates/data/school-v1.js +0 -1563
- package/templates/edupilotpro-v1/feature-card.d.ts +0 -13
- package/templates/edupilotpro-v1/feature-card.js +0 -28
- package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +0 -3
- package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +0 -55
- package/templates/school-v1/footer.d.ts +0 -3
- package/templates/school-v1/footer.js +0 -75
- package/templates/school-v1/index.d.ts +0 -18
- package/templates/school-v1/index.js +0 -60
- package/templates/school-v1/navigation.d.ts +0 -3
- package/templates/school-v1/navigation.js +0 -123
- package/templates/school-v1/sections/about.d.ts +0 -3
- package/templates/school-v1/sections/about.js +0 -49
- package/templates/school-v1/sections/admissions.d.ts +0 -3
- package/templates/school-v1/sections/admissions.js +0 -77
- package/templates/school-v1/sections/contact.d.ts +0 -3
- package/templates/school-v1/sections/contact.js +0 -67
- package/templates/school-v1/sections/faqs.d.ts +0 -3
- package/templates/school-v1/sections/faqs.js +0 -50
- package/templates/school-v1/sections/hero.d.ts +0 -3
- package/templates/school-v1/sections/hero.js +0 -132
- package/templates/school-v1/sections/management.d.ts +0 -3
- package/templates/school-v1/sections/management.js +0 -34
- package/templates/school-v1/sections/policies.d.ts +0 -3
- package/templates/school-v1/sections/policies.js +0 -127
- package/templates/school-v1/sections/programs.d.ts +0 -3
- package/templates/school-v1/sections/programs.js +0 -107
- package/templates/school-v1/sections/testimonials.d.ts +0 -3
- package/templates/school-v1/sections/testimonials.js +0 -46
- package/templates/school-v1/sections/why-choose-us.d.ts +0 -3
- 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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
var
|
|
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
|
-
|
|
67
|
-
|
|
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(
|
|
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 };
|
package/components/field.d.ts
CHANGED
|
@@ -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/
|
|
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;
|
package/components/field.js
CHANGED
|
@@ -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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
76
|
-
return (
|
|
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
|
|
80
|
-
return (
|
|
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
|
|
84
|
-
return (
|
|
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
|
-
|
|
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
|
|
108
|
-
return (
|
|
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
|
|
112
|
-
return (
|
|
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
|
|
116
|
-
return (
|
|
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
|
|
120
|
-
return (
|
|
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
|
|
124
|
-
return (
|
|
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
|
|
128
|
-
return (
|
|
129
|
-
|
|
130
|
-
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
|
|
134
|
-
|
|
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 (
|
|
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 (
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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(
|
|
124
|
-
|
|
125
|
-
image.addEventListener("load",
|
|
126
|
-
image.addEventListener("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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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;
|