@yogiswara/honcho-editor-ui 1.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/dist/components/editor/HAccordionAspectRatio.d.ts +14 -0
- package/dist/components/editor/HAccordionAspectRatio.js +102 -0
- package/dist/components/editor/HAccordionColor.d.ts +12 -0
- package/dist/components/editor/HAccordionColor.js +234 -0
- package/dist/components/editor/HAccordionColorAdjustment.d.ts +31 -0
- package/dist/components/editor/HAccordionColorAdjustment.js +37 -0
- package/dist/components/editor/HAccordionDetails.d.ts +8 -0
- package/dist/components/editor/HAccordionDetails.js +133 -0
- package/dist/components/editor/HAccordionLight.d.ts +16 -0
- package/dist/components/editor/HAccordionLight.js +342 -0
- package/dist/components/editor/HAccordionPreset.d.ts +23 -0
- package/dist/components/editor/HAccordionPreset.js +59 -0
- package/dist/components/editor/HAlertBox.d.ts +7 -0
- package/dist/components/editor/HAlertBox.js +46 -0
- package/dist/components/editor/HAspectRatioMobile.d.ts +0 -0
- package/dist/components/editor/HAspectRatioMobile.js +1 -0
- package/dist/components/editor/HBulkAccordionColorAdjustment.d.ts +55 -0
- package/dist/components/editor/HBulkAccordionColorAdjustment.js +31 -0
- package/dist/components/editor/HBulkAccordionColorAdjustmentColors.d.ts +20 -0
- package/dist/components/editor/HBulkAccordionColorAdjustmentColors.js +121 -0
- package/dist/components/editor/HBulkAccordionColorAdjustmentDetails.d.ts +12 -0
- package/dist/components/editor/HBulkAccordionColorAdjustmentDetails.js +65 -0
- package/dist/components/editor/HBulkAccordionColorAdjustmentLight.d.ts +28 -0
- package/dist/components/editor/HBulkAccordionColorAdjustmentLight.js +177 -0
- package/dist/components/editor/HBulkColorAdjustmentMobile.d.ts +53 -0
- package/dist/components/editor/HBulkColorAdjustmentMobile.js +16 -0
- package/dist/components/editor/HBulkColorMobile.d.ts +20 -0
- package/dist/components/editor/HBulkColorMobile.js +121 -0
- package/dist/components/editor/HBulkDetailsMobile.d.ts +12 -0
- package/dist/components/editor/HBulkDetailsMobile.js +65 -0
- package/dist/components/editor/HBulkLightMobile.d.ts +28 -0
- package/dist/components/editor/HBulkLightMobile.js +192 -0
- package/dist/components/editor/HBulkPreset.d.ts +24 -0
- package/dist/components/editor/HBulkPreset.js +33 -0
- package/dist/components/editor/HBulkPresetMobile.d.ts +15 -0
- package/dist/components/editor/HBulkPresetMobile.js +26 -0
- package/dist/components/editor/HDialogBox.d.ts +18 -0
- package/dist/components/editor/HDialogBox.js +51 -0
- package/dist/components/editor/HDialogCopy.d.ts +40 -0
- package/dist/components/editor/HDialogCopy.js +80 -0
- package/dist/components/editor/HFooter.d.ts +12 -0
- package/dist/components/editor/HFooter.js +24 -0
- package/dist/components/editor/HHeaderEditor.d.ts +17 -0
- package/dist/components/editor/HHeaderEditor.js +27 -0
- package/dist/components/editor/HImageEditorBulkDekstop.d.ts +15 -0
- package/dist/components/editor/HImageEditorBulkDekstop.js +26 -0
- package/dist/components/editor/HImageEditorBulkMobile.d.ts +72 -0
- package/dist/components/editor/HImageEditorBulkMobile.js +81 -0
- package/dist/components/editor/HImageEditorDekstop.d.ts +15 -0
- package/dist/components/editor/HImageEditorDekstop.js +29 -0
- package/dist/components/editor/HImageEditorMobile.d.ts +47 -0
- package/dist/components/editor/HImageEditorMobile.js +91 -0
- package/dist/components/editor/HImageEditorMobileLayout.d.ts +14 -0
- package/dist/components/editor/HImageEditorMobileLayout.js +57 -0
- package/dist/components/editor/HImageEditorPage.d.ts +1 -0
- package/dist/components/editor/HImageEditorPage.js +187 -0
- package/dist/components/editor/HModalEditorDekstop.d.ts +13 -0
- package/dist/components/editor/HModalEditorDekstop.js +22 -0
- package/dist/components/editor/HModalMobile.d.ts +12 -0
- package/dist/components/editor/HModalMobile.js +7 -0
- package/dist/components/editor/HPresetOptionMenu.d.ts +11 -0
- package/dist/components/editor/HPresetOptionMenu.js +20 -0
- package/dist/components/editor/HSliderColorMobile.d.ts +12 -0
- package/dist/components/editor/HSliderColorMobile.js +222 -0
- package/dist/components/editor/HSliderDetailsMobile.d.ts +8 -0
- package/dist/components/editor/HSliderDetailsMobile.js +130 -0
- package/dist/components/editor/HSliderLightMobile.d.ts +16 -0
- package/dist/components/editor/HSliderLightMobile.js +342 -0
- package/dist/components/editor/HTabAspectRatioMobile.d.ts +0 -0
- package/dist/components/editor/HTabAspectRatioMobile.js +1 -0
- package/dist/components/editor/HTabColorAdjustmentMobile.d.ts +29 -0
- package/dist/components/editor/HTabColorAdjustmentMobile.js +16 -0
- package/dist/components/editor/HTabPresetMobile.d.ts +14 -0
- package/dist/components/editor/HTabPresetMobile.js +10 -0
- package/dist/components/editor/HTextField.d.ts +14 -0
- package/dist/components/editor/HTextField.js +51 -0
- package/dist/components/editor/HWatermarkView.d.ts +6 -0
- package/dist/components/editor/HWatermarkView.js +16 -0
- package/dist/hooks/editor/useHonchoEditor.d.ts +272 -0
- package/dist/hooks/editor/useHonchoEditor.js +1203 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +23 -0
- package/dist/lib/editor/honcho-editor.d.ts +324 -0
- package/dist/lib/editor/honcho-editor.js +825 -0
- package/dist/themes/colors.d.ts +12 -0
- package/dist/themes/colors.js +12 -0
- package/dist/themes/honchoTheme.d.ts +25 -0
- package/dist/themes/honchoTheme.js +94 -0
- package/dist/utils/isMobile.d.ts +1 -0
- package/dist/utils/isMobile.js +5 -0
- package/package.json +41 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Dialog, DialogContent, IconButton, Stack, Typography, } from "@mui/material";
|
|
3
|
+
import useColors from "@/colors";
|
|
4
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
5
|
+
import { CloseOutlined } from "@mui/icons-material";
|
|
6
|
+
export function HBaseDialog(props) {
|
|
7
|
+
const colors = useColors();
|
|
8
|
+
const typography = useHonchoTypography();
|
|
9
|
+
return (_jsxs(Dialog, { disableScrollLock: true, open: props.open, onClose: props.onClose, "aria-labelledby": "responsive-dialog-title", PaperProps: {
|
|
10
|
+
sx: {
|
|
11
|
+
borderRadius: "28px",
|
|
12
|
+
width: { xs: "328px", sm: "456px", md: "456px" },
|
|
13
|
+
// maxWidth: { xs: 328, sm: "456px", md: "456px" },
|
|
14
|
+
//maxHeight: 306,
|
|
15
|
+
// margin: { xs: 0, sm: "auto" },
|
|
16
|
+
},
|
|
17
|
+
}, children: [_jsx(DialogContent, { sx: { pb: "16px", mb: "0px" }, children: _jsxs(Stack, { direction: "column", children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(Typography, {}), _jsx(Typography, { color: colors.onSurface, sx: { ...typography.titleMedium }, children: props.title }), _jsx(CloseButton, { onClick: props.onClose })] }), _jsx(Typography, { variant: "bodyMedium", color: colors.onSurface, children: props.description })] }) }), props.action && (_jsx(DialogContent, { sx: { pt: "0px", mt: "0px" }, children: _jsx(Stack, { alignItems: "center", width: "100%", children: props.action }) }))] }));
|
|
18
|
+
}
|
|
19
|
+
export function HDialogForPreset(props) {
|
|
20
|
+
const colors = useColors();
|
|
21
|
+
const typography = useHonchoTypography();
|
|
22
|
+
return (_jsx(Dialog, { disableScrollLock: true, open: props.open, onClose: props.onClose, "aria-labelledby": "responsive-dialog-title", PaperProps: {
|
|
23
|
+
sx: {
|
|
24
|
+
borderRadius: "28px",
|
|
25
|
+
maxWidth: { xs: 328, sm: "456px", md: "456px" },
|
|
26
|
+
//maxHeight: 306,
|
|
27
|
+
margin: { xs: 0, sm: "auto" },
|
|
28
|
+
},
|
|
29
|
+
}, children: _jsx(DialogContent, { sx: { padding: { xs: "24px 24px 0 24px", sm: "24 24px 0 24px" } }, children: _jsxs(Stack, { spacing: 0, direction: "column", children: [_jsx(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: _jsx(Typography, { color: colors.onSurface, sx: { ...typography.labelLarge }, children: props.title }) }), _jsxs(Stack, { direction: "column", sx: { pt: "12px" }, children: [_jsx(Stack, { sx: { pt: "20px", pb: "20px" }, children: props.action }), _jsxs(Stack, { children: [_jsx(Typography, { variant: "bodyMedium", color: colors.onSurface, children: props.description }), props.actionAdjust] })] })] }) }) }));
|
|
30
|
+
}
|
|
31
|
+
export function PositiveButton(props) {
|
|
32
|
+
const colors = useColors();
|
|
33
|
+
return (_jsx(Button, { variant: "text", sx: {
|
|
34
|
+
":hover": {
|
|
35
|
+
backgroundColor: "transparent",
|
|
36
|
+
},
|
|
37
|
+
}, onClick: props.onClick, children: _jsx(Typography, { variant: "buttonMedium", color: colors.onSurface, children: props.text }) }));
|
|
38
|
+
}
|
|
39
|
+
export function NegativeButton(props) {
|
|
40
|
+
const colors = useColors();
|
|
41
|
+
return (_jsx(Button, { variant: "text", sx: {
|
|
42
|
+
borderRadius: 100,
|
|
43
|
+
color: colors.error,
|
|
44
|
+
":hover": {
|
|
45
|
+
backgroundColor: "transparent",
|
|
46
|
+
},
|
|
47
|
+
}, disabled: false, onClick: props.onClick, children: props.text }));
|
|
48
|
+
}
|
|
49
|
+
function CloseButton(props) {
|
|
50
|
+
return (_jsx(IconButton, { onClick: props.onClick, children: _jsx(CloseOutlined, { htmlColor: "black" }) }));
|
|
51
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type CheckState = {
|
|
3
|
+
[key: string]: boolean;
|
|
4
|
+
};
|
|
5
|
+
interface Props {
|
|
6
|
+
colorChecks: CheckState;
|
|
7
|
+
lightChecks: CheckState;
|
|
8
|
+
detailsChecks: CheckState;
|
|
9
|
+
expanded: {
|
|
10
|
+
color: boolean;
|
|
11
|
+
light: boolean;
|
|
12
|
+
details: boolean;
|
|
13
|
+
};
|
|
14
|
+
onCopyEdit: () => void;
|
|
15
|
+
onParentChange: (event: React.ChangeEvent<HTMLInputElement>, setter: React.Dispatch<React.SetStateAction<any>>) => void;
|
|
16
|
+
onChildChange: (event: React.ChangeEvent<HTMLInputElement>, setter: React.Dispatch<React.SetStateAction<any>>) => void;
|
|
17
|
+
onToggleExpand: (section: 'color' | 'light' | 'details') => void;
|
|
18
|
+
setColorChecks: React.Dispatch<React.SetStateAction<any>>;
|
|
19
|
+
setLightChecks: React.Dispatch<React.SetStateAction<any>>;
|
|
20
|
+
setDetailsChecks: React.Dispatch<React.SetStateAction<any>>;
|
|
21
|
+
}
|
|
22
|
+
export declare function HDialogCopy(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
interface PropsPreset {
|
|
24
|
+
colorChecks: CheckState;
|
|
25
|
+
lightChecks: CheckState;
|
|
26
|
+
detailsChecks: CheckState;
|
|
27
|
+
expanded: {
|
|
28
|
+
color: boolean;
|
|
29
|
+
light: boolean;
|
|
30
|
+
details: boolean;
|
|
31
|
+
};
|
|
32
|
+
onParentChange: (event: React.ChangeEvent<HTMLInputElement>, setter: React.Dispatch<React.SetStateAction<any>>) => void;
|
|
33
|
+
onChildChange: (event: React.ChangeEvent<HTMLInputElement>, setter: React.Dispatch<React.SetStateAction<any>>) => void;
|
|
34
|
+
onToggleExpand: (section: 'color' | 'light' | 'details') => void;
|
|
35
|
+
setColorChecks: React.Dispatch<React.SetStateAction<any>>;
|
|
36
|
+
setLightChecks: React.Dispatch<React.SetStateAction<any>>;
|
|
37
|
+
setDetailsChecks: React.Dispatch<React.SetStateAction<any>>;
|
|
38
|
+
}
|
|
39
|
+
export declare function HDialogPreset(props: PropsPreset): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Stack, Typography, Checkbox, Collapse, FormControlLabel, IconButton } from "@mui/material";
|
|
3
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
4
|
+
import useColors from "@/colors";
|
|
5
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
6
|
+
export function HDialogCopy(props) {
|
|
7
|
+
const colors = useColors();
|
|
8
|
+
const typography = useHonchoTypography();
|
|
9
|
+
// --- Derived state is now calculated from props ---
|
|
10
|
+
const colorValues = Object.values(props.colorChecks);
|
|
11
|
+
const colorCheckedCount = colorValues.filter(Boolean).length;
|
|
12
|
+
const isColorParentChecked = colorCheckedCount === colorValues.length;
|
|
13
|
+
const isColorParentIndeterminate = colorCheckedCount > 0 && !isColorParentChecked;
|
|
14
|
+
const lightValues = Object.values(props.lightChecks);
|
|
15
|
+
const lightCheckedCount = lightValues.filter(Boolean).length;
|
|
16
|
+
const isLightParentChecked = lightCheckedCount === lightValues.length;
|
|
17
|
+
const isLightParentIndeterminate = lightCheckedCount > 0 && !isLightParentChecked;
|
|
18
|
+
const detailsValues = Object.values(props.detailsChecks);
|
|
19
|
+
const detailsCheckedCount = detailsValues.filter(Boolean).length;
|
|
20
|
+
const isDetailsParentChecked = detailsCheckedCount === detailsValues.length;
|
|
21
|
+
const isDetailsParentIndeterminate = detailsCheckedCount > 0 && !isDetailsParentChecked;
|
|
22
|
+
const checkboxStyle = {
|
|
23
|
+
// pt: "5px",
|
|
24
|
+
color: colors.onSurface,
|
|
25
|
+
'&.Mui-checked, &.Mui-indeterminate': { color: colors.onSurface },
|
|
26
|
+
};
|
|
27
|
+
return (_jsxs(Stack, { direction: "column", spacing: 1, sx: { padding: 0, margin: 0, width: '100%' }, children: [_jsxs(Stack, { children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Color" }), control: _jsx(Checkbox, { color: "default", icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), indeterminateIcon: _jsx(RoundedSquareIndeterminateIcon, { color: colors.onSurface }), checked: isColorParentChecked, indeterminate: isColorParentIndeterminate, onChange: (e) => props.onParentChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface }, children: `${colorCheckedCount}/${colorValues.length}` }), _jsx(IconButton, { onClick: () => props.onToggleExpand('color'), size: "small", sx: { pt: "3px" }, children: _jsx(ExpandMoreIcon, { sx: { colors: colors.background, transition: 'transform 0.3s', transform: props.expanded.color ? 'rotate(180deg)' : 'rotate(0deg)' } }) })] })] }), _jsx(Collapse, { in: props.expanded.color, timeout: "auto", unmountOnExit: true, children: _jsxs(Stack, { direction: "column", sx: { ml: 2, pl: 1.5 }, children: [_jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Temperature" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "temperature", checked: props.colorChecks.temperature, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Tint" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "tint", checked: props.colorChecks.tint, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Vibrance" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "vibrance", checked: props.colorChecks.vibrance, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Saturation" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "saturation", checked: props.colorChecks.saturation, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) })] }) })] }), _jsxs(Stack, { children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Light" }), control: _jsx(Checkbox, { color: "default", icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), indeterminateIcon: _jsx(RoundedSquareIndeterminateIcon, { color: colors.onSurface }), checked: isLightParentChecked, indeterminate: isLightParentIndeterminate, onChange: (e) => props.onParentChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface }, children: `${lightCheckedCount}/${lightValues.length}` }), _jsx(IconButton, { onClick: () => props.onToggleExpand('light'), size: "small", sx: { pt: "3px" }, children: _jsx(ExpandMoreIcon, { sx: { transition: 'transform 0.3s', transform: props.expanded.light ? 'rotate(180deg)' : 'rotate(0deg)' } }) })] })] }), _jsx(Collapse, { in: props.expanded.light, timeout: "auto", unmountOnExit: true, children: _jsxs(Stack, { direction: "column", sx: { ml: 2, pl: 1.5 }, children: [_jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Exposure" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "exposure", checked: props.lightChecks.exposure, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Contrast" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "contrast", checked: props.lightChecks.contrast, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Highlights" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "highlights", checked: props.lightChecks.highlights, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Shadows" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "shadows", checked: props.lightChecks.shadows, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Whites" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "whites", checked: props.lightChecks.whites, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Blacks" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "blacks", checked: props.lightChecks.blacks, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) })] }) })] }), _jsxs(Stack, { children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Details" }), control: _jsx(Checkbox, { color: "default", icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), indeterminateIcon: _jsx(RoundedSquareIndeterminateIcon, { color: colors.onSurface }), checked: isDetailsParentChecked, indeterminate: isDetailsParentIndeterminate, onChange: (e) => props.onParentChange(e, props.setDetailsChecks), sx: checkboxStyle }) }), _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface }, children: `${detailsCheckedCount}/${detailsValues.length}` }), _jsx(IconButton, { onClick: () => props.onToggleExpand('details'), size: "small", sx: { pt: "3px" }, children: _jsx(ExpandMoreIcon, { sx: { transition: 'transform 0.3s', transform: props.expanded.details ? 'rotate(180deg)' : 'rotate(0deg)' } }) })] })] }), _jsx(Collapse, { in: props.expanded.details, timeout: "auto", unmountOnExit: true, children: _jsxs(Stack, { direction: "column", sx: { ml: 2, pl: 1.5 }, children: [_jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Clarity" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "clarity", checked: props.detailsChecks.clarity, onChange: (e) => props.onChildChange(e, props.setDetailsChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: _jsx(Typography, { sx: { ...typography.bodyMedium, color: colors.onSurface, pt: "2px" }, children: "Sharpness" }), control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "sharpness", checked: props.detailsChecks.sharpness, onChange: (e) => props.onChildChange(e, props.setDetailsChecks), sx: checkboxStyle }) })] }) })] }), _jsx(Button, { onClick: props.onCopyEdit, sx: { ...typography.labelMedium, mt: '20px', height: '40px', color: colors.surface, backgroundColor: colors.onSurface, borderRadius: '100px', textTransform: 'none' }, children: "Copy" })] }));
|
|
28
|
+
}
|
|
29
|
+
// A component for the UNCHECKED box
|
|
30
|
+
const RoundedSquareIcon = ({ color }) => (_jsx("div", { style: {
|
|
31
|
+
width: 18,
|
|
32
|
+
height: 18,
|
|
33
|
+
border: `2px solid ${color}`, // Example color for the border
|
|
34
|
+
borderRadius: '5px',
|
|
35
|
+
backgroundColor: 'transparent',
|
|
36
|
+
} }));
|
|
37
|
+
// A component for the CHECKED box
|
|
38
|
+
const RoundedSquareCheckedIcon = ({ color }) => (_jsx("div", { style: {
|
|
39
|
+
width: 18,
|
|
40
|
+
height: 18,
|
|
41
|
+
border: `2px solid ${color}`, // Example color for the border
|
|
42
|
+
backgroundColor: `${color}`,
|
|
43
|
+
borderRadius: '5px',
|
|
44
|
+
display: 'flex',
|
|
45
|
+
alignItems: 'center',
|
|
46
|
+
justifyContent: 'center',
|
|
47
|
+
}, children: _jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "#FFFFFF", strokeWidth: "3", children: _jsx("path", { d: "M20 6L9 17L4 12" }) }) }));
|
|
48
|
+
const RoundedSquareIndeterminateIcon = ({ color }) => (_jsx("div", { style: {
|
|
49
|
+
// These styles MUST match your checked icon's container
|
|
50
|
+
width: 18,
|
|
51
|
+
height: 18,
|
|
52
|
+
border: `2px solid ${color}`,
|
|
53
|
+
backgroundColor: `${color}`,
|
|
54
|
+
borderRadius: '5px',
|
|
55
|
+
display: 'flex',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
justifyContent: 'center',
|
|
58
|
+
}, children: _jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "#FFFFFF", strokeWidth: "3", children: _jsx("path", { d: "M5 12L19 12" }) }) }));
|
|
59
|
+
export function HDialogPreset(props) {
|
|
60
|
+
const colors = useColors();
|
|
61
|
+
const typography = useHonchoTypography();
|
|
62
|
+
// --- Derived state is now calculated from props ---
|
|
63
|
+
const colorValues = Object.values(props.colorChecks);
|
|
64
|
+
const colorCheckedCount = colorValues.filter(Boolean).length;
|
|
65
|
+
const isColorParentChecked = colorCheckedCount === colorValues.length;
|
|
66
|
+
const isColorParentIndeterminate = colorCheckedCount > 0 && !isColorParentChecked;
|
|
67
|
+
const lightValues = Object.values(props.lightChecks);
|
|
68
|
+
const lightCheckedCount = lightValues.filter(Boolean).length;
|
|
69
|
+
const isLightParentChecked = lightCheckedCount === lightValues.length;
|
|
70
|
+
const isLightParentIndeterminate = lightCheckedCount > 0 && !isLightParentChecked;
|
|
71
|
+
const detailsValues = Object.values(props.detailsChecks);
|
|
72
|
+
const detailsCheckedCount = detailsValues.filter(Boolean).length;
|
|
73
|
+
const isDetailsParentChecked = detailsCheckedCount === detailsValues.length;
|
|
74
|
+
const isDetailsParentIndeterminate = detailsCheckedCount > 0 && !isDetailsParentChecked;
|
|
75
|
+
const checkboxStyle = {
|
|
76
|
+
color: colors.onSurface,
|
|
77
|
+
'&.Mui-checked, &.Mui-indeterminate': { color: colors.onSurface },
|
|
78
|
+
};
|
|
79
|
+
return (_jsxs(Stack, { direction: "column", spacing: 1, sx: { padding: 0, margin: 0, width: '100%' }, children: [_jsxs(Stack, { children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(FormControlLabel, { label: "Color", control: _jsx(Checkbox, { color: "default", icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), indeterminateIcon: _jsx(RoundedSquareIndeterminateIcon, { color: colors.onSurface }), checked: isColorParentChecked, indeterminate: isColorParentIndeterminate, onChange: (e) => props.onParentChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(Typography, { sx: { ...typography.labelMedium, color: colors.onSurface }, children: `${colorCheckedCount}/${colorValues.length}` }), _jsx(IconButton, { onClick: () => props.onToggleExpand('color'), size: "small", children: _jsx(ExpandMoreIcon, { sx: { colors: colors.background, transition: 'transform 0.3s', transform: props.expanded.color ? 'rotate(180deg)' : 'rotate(0deg)' } }) })] })] }), _jsx(Collapse, { in: props.expanded.color, timeout: "auto", unmountOnExit: true, children: _jsxs(Stack, { direction: "column", sx: { ml: 2, pl: 1.5 }, children: [_jsx(FormControlLabel, { label: "Temperature", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "temperature", checked: props.colorChecks.temperature, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Tint", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "tint", checked: props.colorChecks.tint, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Vibrance", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "vibrance", checked: props.colorChecks.vibrance, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Saturation", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), name: "saturation", checked: props.colorChecks.saturation, onChange: (e) => props.onChildChange(e, props.setColorChecks), sx: checkboxStyle }) })] }) })] }), _jsxs(Stack, { children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(FormControlLabel, { label: "Light", control: _jsx(Checkbox, { color: "default", icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), indeterminateIcon: _jsx(RoundedSquareIndeterminateIcon, { color: colors.onSurface }), checked: isLightParentChecked, indeterminate: isLightParentIndeterminate, onChange: (e) => props.onParentChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(Typography, { sx: { ...typography.labelMedium, color: colors.onSurface }, children: `${lightCheckedCount}/${lightValues.length}` }), _jsx(IconButton, { onClick: () => props.onToggleExpand('light'), size: "small", children: _jsx(ExpandMoreIcon, { sx: { transition: 'transform 0.3s', transform: props.expanded.light ? 'rotate(180deg)' : 'rotate(0deg)' } }) })] })] }), _jsx(Collapse, { in: props.expanded.light, timeout: "auto", unmountOnExit: true, children: _jsxs(Stack, { direction: "column", sx: { ml: 2, pl: 1.5 }, children: [_jsx(FormControlLabel, { label: "Exposure", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "exposure", checked: props.lightChecks.exposure, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Contrast", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "contrast", checked: props.lightChecks.contrast, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Highlights", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "highlights", checked: props.lightChecks.highlights, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Shadows", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "shadows", checked: props.lightChecks.shadows, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Whites", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "whites", checked: props.lightChecks.whites, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Blacks", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "blacks", checked: props.lightChecks.blacks, onChange: (e) => props.onChildChange(e, props.setLightChecks), sx: checkboxStyle }) })] }) })] }), _jsxs(Stack, { children: [_jsxs(Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", children: [_jsx(FormControlLabel, { label: "Details", control: _jsx(Checkbox, { color: "default", icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), indeterminateIcon: _jsx(RoundedSquareIndeterminateIcon, { color: colors.onSurface }), checked: isDetailsParentChecked, indeterminate: isDetailsParentIndeterminate, onChange: (e) => props.onParentChange(e, props.setDetailsChecks), sx: checkboxStyle }) }), _jsxs(Stack, { direction: "row", alignItems: "center", children: [_jsx(Typography, { sx: { ...typography.labelMedium, color: colors.onSurface }, children: `${detailsCheckedCount}/${detailsValues.length}` }), _jsx(IconButton, { onClick: () => props.onToggleExpand('details'), size: "small", children: _jsx(ExpandMoreIcon, { sx: { transition: 'transform 0.3s', transform: props.expanded.details ? 'rotate(180deg)' : 'rotate(0deg)' } }) })] })] }), _jsx(Collapse, { in: props.expanded.details, timeout: "auto", unmountOnExit: true, children: _jsxs(Stack, { direction: "column", sx: { ml: 2, pl: 1.5 }, children: [_jsx(FormControlLabel, { label: "Clarity", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "clarity", checked: props.detailsChecks.clarity, onChange: (e) => props.onChildChange(e, props.setDetailsChecks), sx: checkboxStyle }) }), _jsx(FormControlLabel, { label: "Sharpness", control: _jsx(Checkbox, { icon: _jsx(RoundedSquareIcon, { color: colors.onSurface }), checkedIcon: _jsx(RoundedSquareCheckedIcon, { color: colors.onSurface }), color: "default", name: "sharpness", checked: props.detailsChecks.sharpness, onChange: (e) => props.onChildChange(e, props.setDetailsChecks), sx: checkboxStyle }) })] }) })] })] }));
|
|
80
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
anchorElZoom: null | HTMLElement;
|
|
4
|
+
onScale: (event: React.MouseEvent<HTMLElement>) => void;
|
|
5
|
+
onZoomMenuClose: () => void;
|
|
6
|
+
zoomLevelText: string;
|
|
7
|
+
onZoomAction: (zoomLevel: string) => void;
|
|
8
|
+
onShowOriginal: () => void;
|
|
9
|
+
onShowEdited: () => void;
|
|
10
|
+
}
|
|
11
|
+
export default function HFooter(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Stack, IconButton, CardMedia, MenuItem, ListItemText, Menu } from "@mui/material";
|
|
3
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
4
|
+
import useColors from "@/colors";
|
|
5
|
+
export default function HFooter(props) {
|
|
6
|
+
const typography = useHonchoTypography();
|
|
7
|
+
const colors = useColors();
|
|
8
|
+
const isZoomMenuOpen = Boolean(props.anchorElZoom);
|
|
9
|
+
return (_jsx(_Fragment, { children: _jsxs(Stack, { direction: "row", alignItems: "center", spacing: 0.5, children: [_jsx(Button, { id: "zoom-button", onClick: props.onScale, "aria-controls": isZoomMenuOpen ? 'zoom-options-menu' : undefined, "aria-haspopup": "true", "aria-expanded": isZoomMenuOpen ? 'true' : undefined, sx: {
|
|
10
|
+
color: colors.surface,
|
|
11
|
+
fontSize: "14px",
|
|
12
|
+
'&.MuiButton-outlined': {
|
|
13
|
+
color: colors.surface,
|
|
14
|
+
},
|
|
15
|
+
}, endIcon: _jsx(CardMedia, { component: "img", image: isZoomMenuOpen ? "/v1/svg/expanded-editor.svg" : "/v1/svg/expand-editor.svg", sx: { width: "11.67px", height: "5.83px" } }), children: props.zoomLevelText }), _jsx(IconButton, { "aria-label": "before-after", onMouseDown: props.onShowOriginal, onMouseUp: props.onShowEdited, onMouseLeave: props.onShowEdited, onTouchStart: props.onShowOriginal, onTouchEnd: props.onShowEdited, sx: { color: colors.outlineVariant }, children: _jsx(CardMedia, { component: "img", title: "before-after", image: "/v1/svg/before-after-editor.svg", sx: { width: "20px", height: "20px" } }) }), _jsxs(Menu, { id: "zoom-options-menu", anchorEl: props.anchorElZoom, open: isZoomMenuOpen, onClose: props.onZoomMenuClose, anchorOrigin: { vertical: 'top', horizontal: 'center' }, transformOrigin: { vertical: 'bottom', horizontal: 'center' }, slotProps: {
|
|
16
|
+
paper: {
|
|
17
|
+
sx: {
|
|
18
|
+
backgroundColor: colors.onBackground,
|
|
19
|
+
color: colors.surface,
|
|
20
|
+
border: `1px solid ${colors.outlineVariant}`,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
}, children: [_jsx(MenuItem, { onClick: () => props.onZoomAction('in'), children: _jsx(ListItemText, { sx: { ...typography.bodyMedium, color: colors.surface }, children: "Zoom in" }) }), _jsx(MenuItem, { onClick: () => props.onZoomAction('out'), children: _jsx(ListItemText, { sx: { ...typography.bodyMedium, color: colors.surface }, children: "Zoom out" }) }), _jsx(MenuItem, { onClick: () => props.onZoomAction('fit'), children: _jsx(ListItemText, { sx: { ...typography.bodyMedium, color: colors.surface }, children: "Zoom to fit" }) }), _jsx(MenuItem, { onClick: () => props.onZoomAction('50%'), children: _jsx(ListItemText, { sx: { ...typography.bodyMedium, color: colors.surface }, children: "Zoom to 50%" }) }), _jsx(MenuItem, { onClick: () => props.onZoomAction('100%'), children: _jsx(ListItemText, { sx: { ...typography.bodyMedium, color: colors.surface }, children: "Zoom to 100%" }) }), _jsx(MenuItem, { onClick: () => props.onZoomAction('200%'), children: _jsx(ListItemText, { sx: { ...typography.bodyMedium, color: colors.surface }, children: "Zoom to 200%" }) })] })] }) }));
|
|
24
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
anchorEl: null | HTMLElement;
|
|
4
|
+
valueSelect: string;
|
|
5
|
+
isPasteEnabled: boolean;
|
|
6
|
+
onBack: () => void;
|
|
7
|
+
onUndo: () => void;
|
|
8
|
+
onRedo: () => void;
|
|
9
|
+
onRevert: () => void;
|
|
10
|
+
onCopyEdit: () => void;
|
|
11
|
+
onPasteEdit: () => void;
|
|
12
|
+
onMenuClick: (event: React.MouseEvent<HTMLElement>) => void;
|
|
13
|
+
onMenuClose: () => void;
|
|
14
|
+
onSelectButton: () => void;
|
|
15
|
+
}
|
|
16
|
+
export default function HHeaderEditor(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Stack, IconButton, CardMedia, MenuItem, ListItemText, ListItemIcon, Menu, Button, Typography } from "@mui/material";
|
|
3
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
4
|
+
import useColors from "@/colors";
|
|
5
|
+
import useIsMobile from "@/utils/isMobile";
|
|
6
|
+
export default function HHeaderEditor(props) {
|
|
7
|
+
const typography = useHonchoTypography();
|
|
8
|
+
const colors = useColors();
|
|
9
|
+
const open = Boolean(props.anchorEl);
|
|
10
|
+
const isMobile = useIsMobile();
|
|
11
|
+
return (_jsx(_Fragment, { children: _jsxs(Stack, { direction: "row", justifyContent: "space-between", width: "100%", sx: { pr: !isMobile ? "24px" : "6px" }, children: [_jsx(Stack, { direction: "row", justifyContent: "flex-start", sx: { pl: !isMobile ? "0px" : "14px" }, children: _jsx(IconButton, { "aria-label": "back", onClick: props.onBack, sx: {
|
|
12
|
+
'&:active': {
|
|
13
|
+
transform: 'scale(0.92)',
|
|
14
|
+
},
|
|
15
|
+
transition: 'transform 0.1s ease-in-out',
|
|
16
|
+
}, children: _jsx(CardMedia, { title: "back", src: "svg/Back.svg", component: "img" }) }) }), _jsxs(Stack, { direction: "row", justifyContent: "flex-end", alignItems: "center", sx: { pt: "20px", pb: "12px" }, spacing: 0.1, children: [_jsx(Button, { variant: "text", onClick: props.onSelectButton, sx: { color: colors.outlineVariant }, children: props.valueSelect }), _jsx(IconButton, { "aria-label": "undo", onClick: props.onUndo, sx: { color: colors.outlineVariant }, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/undo-editor.svg" }) }), _jsx(IconButton, { "aria-label": "redo", onClick: props.onRedo, sx: { color: colors.outlineVariant }, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/redo-editor.svg" }) }), _jsx(IconButton, { "aria-label": "option", onClick: props.onMenuClick, "aria-controls": open ? 'options-menu' : undefined, "aria-haspopup": "true", "aria-expanded": open ? 'true' : undefined, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/dots-editor.svg" }) }), _jsxs(Menu, { id: "options-menu", anchorEl: props.anchorEl, open: open, onClose: props.onMenuClose, transformOrigin: { horizontal: 'right', vertical: 'top' }, anchorOrigin: { horizontal: 'right', vertical: 'bottom' }, slotProps: {
|
|
17
|
+
paper: {
|
|
18
|
+
sx: {
|
|
19
|
+
backgroundColor: colors.onBackground,
|
|
20
|
+
color: colors.surface,
|
|
21
|
+
border: `1px solid ${colors.outlineVariant}`,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
}, children: [_jsxs(MenuItem, { onClick: props.onRevert, children: [_jsx(ListItemIcon, { sx: { minWidth: 0, mr: "0px", px: "0px" }, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/revert-editor.svg", sx: { width: "20px", height: "20px" } }) }), _jsx(ListItemText, { children: _jsx(Typography, { sx: { fontSize: "14px", color: colors.surface }, children: "Revert to original" }) })] }), _jsxs(MenuItem, { onClick: props.onCopyEdit, children: [_jsx(ListItemIcon, { sx: { minWidth: 0, mr: "0px", px: "0px" }, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/copy-editor.svg", sx: { width: "20px", height: "20px" } }) }), _jsx(ListItemText, { children: _jsx(Typography, { sx: { fontSize: "14px", color: colors.surface }, children: "Copy edits" }) }), !isMobile &&
|
|
25
|
+
_jsx(ListItemIcon, { sx: { marginLeft: 'auto' }, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/shortcut-copy-editor.svg", sx: { width: "25px", height: "20px" } }) })] }), _jsxs(MenuItem, { onClick: props.onPasteEdit, disabled: !props.isPasteEnabled, children: [_jsx(ListItemIcon, { sx: { minWidth: 0, mr: "0px", px: "0px" }, children: _jsx(CardMedia, { component: "img", image: !props.isPasteEnabled ? "/v1/svg/paste-editor.svg" : "/v1/svg/paste-white.svg", sx: { width: "20px", height: "20px" } }) }), _jsx(ListItemText, { children: _jsx(Typography, { sx: { fontSize: "14px", color: !props.isPasteEnabled ? colors.onSurfaceVariant1 : colors.surface }, children: "Paste edits" }) }), !isMobile &&
|
|
26
|
+
_jsx(ListItemIcon, { sx: { marginLeft: '30px' }, children: _jsx(CardMedia, { component: "img", image: "/v1/svg/shortcut-paste-editor.svg", sx: { width: "25px", height: "20px" } }) })] })] })] })] }) }));
|
|
27
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
activePanel: string;
|
|
4
|
+
isPanelOpen: boolean;
|
|
5
|
+
anchorElZoom: null | HTMLElement;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
footer: React.ReactNode;
|
|
8
|
+
setActivePanel: (accordion: string) => void;
|
|
9
|
+
onScale: (event: React.MouseEvent<HTMLElement>) => void;
|
|
10
|
+
onBeforeAfter: () => void;
|
|
11
|
+
onZoomMenuClose: () => void;
|
|
12
|
+
onZoomAction: (zoomLevel: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export default function HImageEditorBulkDekstop(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Stack, IconButton, CardMedia, Paper, Slide } from "@mui/material";
|
|
3
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
4
|
+
import useColors from "@/colors";
|
|
5
|
+
export default function HImageEditorBulkDekstop(props) {
|
|
6
|
+
const typography = useHonchoTypography();
|
|
7
|
+
const colors = useColors();
|
|
8
|
+
const isZoomMenuOpen = Boolean(props.anchorElZoom);
|
|
9
|
+
return (_jsx(_Fragment, { children: _jsx(Slide, { direction: "left", in: props.isPanelOpen, mountOnEnter: true, unmountOnExit: true, children: _jsx(Paper, { elevation: 3, sx: {
|
|
10
|
+
position: 'inherit',
|
|
11
|
+
right: '30px',
|
|
12
|
+
top: '55px',
|
|
13
|
+
width: '320px',
|
|
14
|
+
height: 'calc(100vh - 70px)',
|
|
15
|
+
zIndex: 1200,
|
|
16
|
+
backgroundColor: '#000000',
|
|
17
|
+
overflow: 'hidden'
|
|
18
|
+
}, children: _jsxs(Stack, { direction: "row", sx: { height: '100%' }, children: [_jsxs(Stack, { direction: "column", sx: { width: 'calc(100% - 60px)', height: '95%' }, children: [_jsx(Stack, { sx: { flexGrow: 1, overflowY: 'auto', px: 2, msOverflowStyle: 'none', scrollbarWidth: 'none', '&::-webkit-scrollbar': { display: 'none' } }, children: props.children }), _jsx(Stack, { sx: {
|
|
19
|
+
flexShrink: 0,
|
|
20
|
+
p: '0px 16px',
|
|
21
|
+
}, children: props.footer })] }), _jsxs(Stack, { justifyContent: "flex-start", spacing: "15px", sx: {
|
|
22
|
+
width: '10px',
|
|
23
|
+
flexShrink: 0,
|
|
24
|
+
pt: 1,
|
|
25
|
+
}, children: [_jsx(IconButton, { onClick: () => props.setActivePanel('colorAdjustment'), children: _jsx(CardMedia, { component: "img", image: props.activePanel === 'colorAdjustment' ? "/v1/svg/color-adjustment-active.svg" : "/v1/svg/color-adjustment-inactive.svg", sx: { width: "20px", height: "20px" } }) }), _jsx(IconButton, { onClick: () => props.setActivePanel('preset'), children: _jsx(CardMedia, { component: "img", image: props.activePanel === 'preset' ? "/v1/svg/watermark-editor-active.svg" : "/v1/svg/watermark-editor-inactive.svg", sx: { width: "20px", height: "20px" } }) })] })] }) }) }) }));
|
|
26
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SelectChangeEvent } from "@mui/material";
|
|
3
|
+
type Preset = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
interface Props {
|
|
8
|
+
presets: Preset[];
|
|
9
|
+
activePanel: string;
|
|
10
|
+
activeSubPanel: string;
|
|
11
|
+
setActivePanel: (tab: string) => void;
|
|
12
|
+
setActiveSubPanel: (subTab: string) => void;
|
|
13
|
+
panelRef: React.RefObject<HTMLDivElement>;
|
|
14
|
+
contentRef: React.RefObject<HTMLDivElement | null>;
|
|
15
|
+
panelHeight: number;
|
|
16
|
+
handleDragStart: (e: React.MouseEvent | React.TouchEvent) => void;
|
|
17
|
+
onContentHeightChange: (height: number) => void;
|
|
18
|
+
onTempDecreaseMax: () => void;
|
|
19
|
+
onTempDecrease: () => void;
|
|
20
|
+
onTempIncrease: () => void;
|
|
21
|
+
onTempIncreaseMax: () => void;
|
|
22
|
+
onTintDecreaseMax: () => void;
|
|
23
|
+
onTintDecrease: () => void;
|
|
24
|
+
onTintIncrease: () => void;
|
|
25
|
+
onTintIncreaseMax: () => void;
|
|
26
|
+
onVibranceDecreaseMax: () => void;
|
|
27
|
+
onVibranceDecrease: () => void;
|
|
28
|
+
onVibranceIncrease: () => void;
|
|
29
|
+
onVibranceIncreaseMax: () => void;
|
|
30
|
+
onSaturationDecreaseMax: () => void;
|
|
31
|
+
onSaturationDecrease: () => void;
|
|
32
|
+
onSaturationIncrease: () => void;
|
|
33
|
+
onSaturationIncreaseMax: () => void;
|
|
34
|
+
onExposureDecreaseMax: () => void;
|
|
35
|
+
onExposureDecrease: () => void;
|
|
36
|
+
onExposureIncrease: () => void;
|
|
37
|
+
onExposureIncreaseMax: () => void;
|
|
38
|
+
onContrastDecreaseMax: () => void;
|
|
39
|
+
onContrastDecrease: () => void;
|
|
40
|
+
onContrastIncrease: () => void;
|
|
41
|
+
onContrastIncreaseMax: () => void;
|
|
42
|
+
onHighlightsDecreaseMax: () => void;
|
|
43
|
+
onHighlightsDecrease: () => void;
|
|
44
|
+
onHighlightsIncrease: () => void;
|
|
45
|
+
onHighlightsIncreaseMax: () => void;
|
|
46
|
+
onShadowsDecreaseMax: () => void;
|
|
47
|
+
onShadowsDecrease: () => void;
|
|
48
|
+
onShadowsIncrease: () => void;
|
|
49
|
+
onShadowsIncreaseMax: () => void;
|
|
50
|
+
onWhitesDecreaseMax: () => void;
|
|
51
|
+
onWhitesDecrease: () => void;
|
|
52
|
+
onWhitesIncrease: () => void;
|
|
53
|
+
onWhitesIncreaseMax: () => void;
|
|
54
|
+
onBlacksDecreaseMax: () => void;
|
|
55
|
+
onBlacksDecrease: () => void;
|
|
56
|
+
onBlacksIncrease: () => void;
|
|
57
|
+
onBlacksIncreaseMax: () => void;
|
|
58
|
+
onClarityDecreaseMax: () => void;
|
|
59
|
+
onClarityDecrease: () => void;
|
|
60
|
+
onClarityIncrease: () => void;
|
|
61
|
+
onClarityIncreaseMax: () => void;
|
|
62
|
+
onSharpnessDecreaseMax: () => void;
|
|
63
|
+
onSharpnessDecrease: () => void;
|
|
64
|
+
onSharpnessIncrease: () => void;
|
|
65
|
+
onSharpnessIncreaseMax: () => void;
|
|
66
|
+
selectedPresetBulk: string;
|
|
67
|
+
onSelectPresetBulk: (event: SelectChangeEvent<string>) => void;
|
|
68
|
+
onPresetMenuClickBulk: (event: React.MouseEvent<HTMLElement>, presetId: string) => void;
|
|
69
|
+
onOpenPresetModalBulk: () => void;
|
|
70
|
+
}
|
|
71
|
+
export default function HImageEditorBulkMobile(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BottomNavigation, BottomNavigationAction, Box, CardMedia, Paper, Stack } from "@mui/material";
|
|
3
|
+
import useColors from "@/colors";
|
|
4
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
5
|
+
import HBulkColorAdjustmentMobile from "./HBulkColorAdjustmentMobile";
|
|
6
|
+
import HBulkPresetMobile from "./HBulkPresetMobile";
|
|
7
|
+
// Data structure for the sub-navigation tabs
|
|
8
|
+
const subTabs = {
|
|
9
|
+
colorAdjustment: [
|
|
10
|
+
{ value: "color", label: "Color", inactiveIcon: "/v1/svg/white-balance-inactive-mobile.svg", activeIcon: "/v1/svg/white-balance-active-mobile.svg" },
|
|
11
|
+
{ value: "light", label: "Light", inactiveIcon: "/v1/svg/light-inactive-mobile.svg", activeIcon: "/v1/svg/light-active-mobile.svg" },
|
|
12
|
+
{ value: "details", label: "Details", inactiveIcon: "/v1/svg/details-inactive-mobile.svg", activeIcon: "/v1/svg/details-active-mobile.svg" },
|
|
13
|
+
],
|
|
14
|
+
aspectRatio: [
|
|
15
|
+
{ value: "portrait", label: "Portrait" },
|
|
16
|
+
{ value: "square", label: "Square" },
|
|
17
|
+
{ value: "wide", label: "Wide" },
|
|
18
|
+
],
|
|
19
|
+
preset: [
|
|
20
|
+
{ value: "Preset", label: "Preset", inactiveIcon: "/v1/svg/preset-inactive-mobile.svg", activeIcon: "/v1/svg/preset-active-mobile.svg" },
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
export default function HImageEditorBulkMobile(props) {
|
|
24
|
+
const typography = useHonchoTypography();
|
|
25
|
+
const colors = useColors();
|
|
26
|
+
const handleChange = (event, newValue) => {
|
|
27
|
+
props.setActivePanel(newValue);
|
|
28
|
+
};
|
|
29
|
+
const currentSubTabs = subTabs[props.activePanel];
|
|
30
|
+
return (_jsx(Paper, { elevation: 0, sx: {
|
|
31
|
+
position: 'fixed',
|
|
32
|
+
bottom: 0,
|
|
33
|
+
left: 0,
|
|
34
|
+
right: 0,
|
|
35
|
+
zIndex: 1300,
|
|
36
|
+
backgroundColor: 'transparent',
|
|
37
|
+
}, children: _jsxs(Stack, { direction: "column", children: [props.activeSubPanel && (_jsxs(Paper, { ref: props.panelRef, elevation: 3, className: "draggable-panel MuiPaper-transition", sx: {
|
|
38
|
+
height: `${props.panelHeight}px`,
|
|
39
|
+
maxHeight: '60vh',
|
|
40
|
+
backgroundColor: 'rgba(40, 40, 40, 0.85)',
|
|
41
|
+
overflow: 'hidden',
|
|
42
|
+
borderRadius: "0px",
|
|
43
|
+
'&.MuiPaper-transition': {
|
|
44
|
+
transition: 'height 0.5s ease-in-out',
|
|
45
|
+
},
|
|
46
|
+
}, children: [_jsx(Box, { onMouseDown: props.handleDragStart, onTouchStart: props.handleDragStart, sx: {
|
|
47
|
+
display: 'flex',
|
|
48
|
+
justifyContent: 'center',
|
|
49
|
+
alignItems: 'center',
|
|
50
|
+
pt: '5px',
|
|
51
|
+
pb: '12px',
|
|
52
|
+
cursor: 'ns-resize',
|
|
53
|
+
touchAction: 'none',
|
|
54
|
+
}, children: _jsx(Box, { sx: { width: 40, height: 5, borderRadius: '2.5px', backgroundColor: 'rgba(255, 255, 255, 0.5)' } }) }), _jsxs(Box, { ref: props.contentRef, sx: {
|
|
55
|
+
paddingX: "8px",
|
|
56
|
+
paddingBottom: 3,
|
|
57
|
+
height: 'calc(100% - 30px)',
|
|
58
|
+
overflowY: 'auto',
|
|
59
|
+
scrollbarWidth: 'none',
|
|
60
|
+
'&::-webkit-scrollbar': { display: 'none' },
|
|
61
|
+
}, children: [props.activePanel === 'colorAdjustment' && _jsx(HBulkColorAdjustmentMobile, { ...props }), props.activePanel === 'preset' && _jsx(HBulkPresetMobile, { ...props })] })] })), currentSubTabs && (_jsx(Paper, { sx: {
|
|
62
|
+
backgroundColor: colors.onBackground,
|
|
63
|
+
paddingTop: "10px",
|
|
64
|
+
pb: "0px",
|
|
65
|
+
mb: "0px",
|
|
66
|
+
px: "44px",
|
|
67
|
+
borderRadius: "0px",
|
|
68
|
+
}, elevation: 3, children: _jsx(BottomNavigation, { showLabels: true, sx: { backgroundColor: colors.onBackground, gap: '10px' }, children: currentSubTabs.map((tab) => {
|
|
69
|
+
const isActive = props.activeSubPanel === tab.value;
|
|
70
|
+
const iconSrc = isActive ? tab.activeIcon : tab.inactiveIcon;
|
|
71
|
+
return (_jsx(BottomNavigationAction, { label: tab.label, value: tab.value, onClick: () => props.setActiveSubPanel(isActive ? '' : tab.value), icon: iconSrc && _jsx(CardMedia, { component: "img", image: iconSrc, sx: { width: "20px", height: "20px", mb: "5px" } }), sx: {
|
|
72
|
+
color: isActive ? colors.surface : colors.onSurfaceVariant1,
|
|
73
|
+
minWidth: 'auto',
|
|
74
|
+
p: 0,
|
|
75
|
+
'& .MuiBottomNavigationAction-label': {
|
|
76
|
+
...typography.labelSmall,
|
|
77
|
+
color: isActive ? colors.surface : colors.onSurfaceVariant1,
|
|
78
|
+
}
|
|
79
|
+
} }, tab.value));
|
|
80
|
+
}) }) })), _jsx(Paper, { sx: { backgroundColor: colors.onBackground, borderRadius: "0px", pb: "0px", mb: "0px" }, elevation: 3, children: _jsx(Stack, { direction: "row", justifyContent: "center", alignItems: "center", sx: { pt: "0px", mb: "0px", mr: "0px", ml: "0px" }, children: _jsxs(BottomNavigation, { value: props.activePanel, onChange: handleChange, sx: { backgroundColor: colors.onBackground }, children: [_jsx(BottomNavigationAction, { value: "colorAdjustment", sx: { px: '12px', py: '0px', minWidth: 'auto' }, icon: _jsx(CardMedia, { component: "img", image: props.activePanel === 'colorAdjustment' ? "/v1/svg/color-adjustment-active-mobile.svg" : "/v1/svg/color-adjustment-inactive-mobile.svg", sx: { width: "20px", height: "20px" } }) }), _jsx(BottomNavigationAction, { value: "preset", sx: { px: '12px', py: '0px', minWidth: 'auto' }, icon: _jsx(CardMedia, { component: "img", image: props.activePanel === 'preset' ? "/v1/svg/preset-and-watermark-active-mobile.svg" : "/v1/svg/preset-and-watermark-inactive-mobile.svg", sx: { width: "20px", height: "20px" } }) })] }) }) })] }) }));
|
|
81
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface Props {
|
|
3
|
+
activePanel: string;
|
|
4
|
+
isPanelOpen: boolean;
|
|
5
|
+
anchorElZoom: null | HTMLElement;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
footer: React.ReactNode;
|
|
8
|
+
setActivePanel: (accordion: string) => void;
|
|
9
|
+
onScale: (event: React.MouseEvent<HTMLElement>) => void;
|
|
10
|
+
onBeforeAfter: () => void;
|
|
11
|
+
onZoomMenuClose: () => void;
|
|
12
|
+
onZoomAction: (zoomLevel: string) => void;
|
|
13
|
+
}
|
|
14
|
+
export default function HImageEditorDesktop(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Stack, IconButton, CardMedia, Paper, Slide } from "@mui/material";
|
|
3
|
+
import useHonchoTypography from "@/honchoTheme";
|
|
4
|
+
import useColors from "@/colors";
|
|
5
|
+
export default function HImageEditorDesktop(props) {
|
|
6
|
+
const typography = useHonchoTypography();
|
|
7
|
+
const colors = useColors();
|
|
8
|
+
const isZoomMenuOpen = Boolean(props.anchorElZoom);
|
|
9
|
+
return (_jsx(_Fragment, { children: _jsx(Slide, { direction: "left", in: props.isPanelOpen, mountOnEnter: true, unmountOnExit: true, children: _jsx(Stack, { sx: {}, children: _jsx(Paper, { elevation: 3, sx: {
|
|
10
|
+
position: 'inherit',
|
|
11
|
+
right: '40px',
|
|
12
|
+
top: '55px',
|
|
13
|
+
width: '320px',
|
|
14
|
+
height: 'calc(100vh - 70px)',
|
|
15
|
+
// pb: '10px',
|
|
16
|
+
zIndex: 1200,
|
|
17
|
+
backgroundColor: '#000000',
|
|
18
|
+
overflow: 'hidden',
|
|
19
|
+
// pl: "20px"
|
|
20
|
+
}, children: _jsxs(Stack, { direction: "row", sx: { height: '100%', pl: "10px", }, children: [_jsxs(Stack, { direction: "column", sx: { width: 'calc(100% - 60px)', height: '95%' }, children: [_jsx(Stack, { sx: { flexGrow: 1, overflowY: 'auto', px: 2, msOverflowStyle: 'none', scrollbarWidth: 'none', '&::-webkit-scrollbar': { display: 'none' } }, children: props.children }), _jsx(Stack, { sx: {
|
|
21
|
+
flexShrink: 0,
|
|
22
|
+
p: '0px 25px',
|
|
23
|
+
}, children: props.footer })] }), _jsxs(Stack, { justifyContent: "flex-start", spacing: "15px", sx: {
|
|
24
|
+
width: '10px',
|
|
25
|
+
flexShrink: 0,
|
|
26
|
+
pt: 1,
|
|
27
|
+
pl: "10px",
|
|
28
|
+
}, children: [_jsx(IconButton, { onClick: () => props.setActivePanel('colorAdjustment'), children: _jsx(CardMedia, { component: "img", image: props.activePanel === 'colorAdjustment' ? "/v1/svg/color-adjustment-active.svg" : "/v1/svg/color-adjustment-inactive.svg", sx: { width: "20px", height: "20px" } }) }), _jsx(IconButton, { onClick: () => props.setActivePanel('preset'), children: _jsx(CardMedia, { component: "img", image: props.activePanel === 'preset' ? "/v1/svg/watermark-editor-active.svg" : "/v1/svg/watermark-editor-inactive.svg", sx: { width: "20px", height: "20px" } }) })] })] }) }) }) }) }));
|
|
29
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type Preset = {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
};
|
|
6
|
+
interface Props {
|
|
7
|
+
presets: Preset[];
|
|
8
|
+
activePanel: string;
|
|
9
|
+
activeSubPanel: string;
|
|
10
|
+
setActivePanel: (tab: string) => void;
|
|
11
|
+
setActiveSubPanel: (subTab: string) => void;
|
|
12
|
+
panelRef: React.RefObject<HTMLDivElement>;
|
|
13
|
+
contentRef: React.RefObject<HTMLDivElement | null>;
|
|
14
|
+
panelHeight: number;
|
|
15
|
+
handleDragStart: (e: React.MouseEvent | React.TouchEvent) => void;
|
|
16
|
+
onContentHeightChange: (height: number) => void;
|
|
17
|
+
tempScore: number;
|
|
18
|
+
tintScore: number;
|
|
19
|
+
vibranceScore: number;
|
|
20
|
+
saturationScore: number;
|
|
21
|
+
exposureScore: number;
|
|
22
|
+
highlightsScore: number;
|
|
23
|
+
shadowScore: number;
|
|
24
|
+
whiteScore: number;
|
|
25
|
+
blackScore: number;
|
|
26
|
+
contrastScore: number;
|
|
27
|
+
clarityScore: number;
|
|
28
|
+
sharpnessScore: number;
|
|
29
|
+
onTempChange: (value: number) => void;
|
|
30
|
+
onTintChange: (value: number) => void;
|
|
31
|
+
onVibranceChange: (value: number) => void;
|
|
32
|
+
onSaturationChange: (value: number) => void;
|
|
33
|
+
onExposureChange: (value: number) => void;
|
|
34
|
+
onHighlightsChange: (value: number) => void;
|
|
35
|
+
onShadowsChange: (value: number) => void;
|
|
36
|
+
onWhitesChange: (value: number) => void;
|
|
37
|
+
onBlacksChange: (value: number) => void;
|
|
38
|
+
onContrastChange: (value: number) => void;
|
|
39
|
+
onClarityChange: (value: number) => void;
|
|
40
|
+
onSharpnessChange: (value: number) => void;
|
|
41
|
+
selectedPreset: string | null;
|
|
42
|
+
onSelectPreset: (id: string) => void;
|
|
43
|
+
onOpenPresetModal: () => void;
|
|
44
|
+
presetOptionModal: (event: React.MouseEvent<HTMLElement>, presetId: string) => void;
|
|
45
|
+
}
|
|
46
|
+
export default function HImageEditorMobile(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export {};
|