@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.
Files changed (91) hide show
  1. package/dist/components/editor/HAccordionAspectRatio.d.ts +14 -0
  2. package/dist/components/editor/HAccordionAspectRatio.js +102 -0
  3. package/dist/components/editor/HAccordionColor.d.ts +12 -0
  4. package/dist/components/editor/HAccordionColor.js +234 -0
  5. package/dist/components/editor/HAccordionColorAdjustment.d.ts +31 -0
  6. package/dist/components/editor/HAccordionColorAdjustment.js +37 -0
  7. package/dist/components/editor/HAccordionDetails.d.ts +8 -0
  8. package/dist/components/editor/HAccordionDetails.js +133 -0
  9. package/dist/components/editor/HAccordionLight.d.ts +16 -0
  10. package/dist/components/editor/HAccordionLight.js +342 -0
  11. package/dist/components/editor/HAccordionPreset.d.ts +23 -0
  12. package/dist/components/editor/HAccordionPreset.js +59 -0
  13. package/dist/components/editor/HAlertBox.d.ts +7 -0
  14. package/dist/components/editor/HAlertBox.js +46 -0
  15. package/dist/components/editor/HAspectRatioMobile.d.ts +0 -0
  16. package/dist/components/editor/HAspectRatioMobile.js +1 -0
  17. package/dist/components/editor/HBulkAccordionColorAdjustment.d.ts +55 -0
  18. package/dist/components/editor/HBulkAccordionColorAdjustment.js +31 -0
  19. package/dist/components/editor/HBulkAccordionColorAdjustmentColors.d.ts +20 -0
  20. package/dist/components/editor/HBulkAccordionColorAdjustmentColors.js +121 -0
  21. package/dist/components/editor/HBulkAccordionColorAdjustmentDetails.d.ts +12 -0
  22. package/dist/components/editor/HBulkAccordionColorAdjustmentDetails.js +65 -0
  23. package/dist/components/editor/HBulkAccordionColorAdjustmentLight.d.ts +28 -0
  24. package/dist/components/editor/HBulkAccordionColorAdjustmentLight.js +177 -0
  25. package/dist/components/editor/HBulkColorAdjustmentMobile.d.ts +53 -0
  26. package/dist/components/editor/HBulkColorAdjustmentMobile.js +16 -0
  27. package/dist/components/editor/HBulkColorMobile.d.ts +20 -0
  28. package/dist/components/editor/HBulkColorMobile.js +121 -0
  29. package/dist/components/editor/HBulkDetailsMobile.d.ts +12 -0
  30. package/dist/components/editor/HBulkDetailsMobile.js +65 -0
  31. package/dist/components/editor/HBulkLightMobile.d.ts +28 -0
  32. package/dist/components/editor/HBulkLightMobile.js +192 -0
  33. package/dist/components/editor/HBulkPreset.d.ts +24 -0
  34. package/dist/components/editor/HBulkPreset.js +33 -0
  35. package/dist/components/editor/HBulkPresetMobile.d.ts +15 -0
  36. package/dist/components/editor/HBulkPresetMobile.js +26 -0
  37. package/dist/components/editor/HDialogBox.d.ts +18 -0
  38. package/dist/components/editor/HDialogBox.js +51 -0
  39. package/dist/components/editor/HDialogCopy.d.ts +40 -0
  40. package/dist/components/editor/HDialogCopy.js +80 -0
  41. package/dist/components/editor/HFooter.d.ts +12 -0
  42. package/dist/components/editor/HFooter.js +24 -0
  43. package/dist/components/editor/HHeaderEditor.d.ts +17 -0
  44. package/dist/components/editor/HHeaderEditor.js +27 -0
  45. package/dist/components/editor/HImageEditorBulkDekstop.d.ts +15 -0
  46. package/dist/components/editor/HImageEditorBulkDekstop.js +26 -0
  47. package/dist/components/editor/HImageEditorBulkMobile.d.ts +72 -0
  48. package/dist/components/editor/HImageEditorBulkMobile.js +81 -0
  49. package/dist/components/editor/HImageEditorDekstop.d.ts +15 -0
  50. package/dist/components/editor/HImageEditorDekstop.js +29 -0
  51. package/dist/components/editor/HImageEditorMobile.d.ts +47 -0
  52. package/dist/components/editor/HImageEditorMobile.js +91 -0
  53. package/dist/components/editor/HImageEditorMobileLayout.d.ts +14 -0
  54. package/dist/components/editor/HImageEditorMobileLayout.js +57 -0
  55. package/dist/components/editor/HImageEditorPage.d.ts +1 -0
  56. package/dist/components/editor/HImageEditorPage.js +187 -0
  57. package/dist/components/editor/HModalEditorDekstop.d.ts +13 -0
  58. package/dist/components/editor/HModalEditorDekstop.js +22 -0
  59. package/dist/components/editor/HModalMobile.d.ts +12 -0
  60. package/dist/components/editor/HModalMobile.js +7 -0
  61. package/dist/components/editor/HPresetOptionMenu.d.ts +11 -0
  62. package/dist/components/editor/HPresetOptionMenu.js +20 -0
  63. package/dist/components/editor/HSliderColorMobile.d.ts +12 -0
  64. package/dist/components/editor/HSliderColorMobile.js +222 -0
  65. package/dist/components/editor/HSliderDetailsMobile.d.ts +8 -0
  66. package/dist/components/editor/HSliderDetailsMobile.js +130 -0
  67. package/dist/components/editor/HSliderLightMobile.d.ts +16 -0
  68. package/dist/components/editor/HSliderLightMobile.js +342 -0
  69. package/dist/components/editor/HTabAspectRatioMobile.d.ts +0 -0
  70. package/dist/components/editor/HTabAspectRatioMobile.js +1 -0
  71. package/dist/components/editor/HTabColorAdjustmentMobile.d.ts +29 -0
  72. package/dist/components/editor/HTabColorAdjustmentMobile.js +16 -0
  73. package/dist/components/editor/HTabPresetMobile.d.ts +14 -0
  74. package/dist/components/editor/HTabPresetMobile.js +10 -0
  75. package/dist/components/editor/HTextField.d.ts +14 -0
  76. package/dist/components/editor/HTextField.js +51 -0
  77. package/dist/components/editor/HWatermarkView.d.ts +6 -0
  78. package/dist/components/editor/HWatermarkView.js +16 -0
  79. package/dist/hooks/editor/useHonchoEditor.d.ts +272 -0
  80. package/dist/hooks/editor/useHonchoEditor.js +1203 -0
  81. package/dist/index.d.ts +23 -0
  82. package/dist/index.js +23 -0
  83. package/dist/lib/editor/honcho-editor.d.ts +324 -0
  84. package/dist/lib/editor/honcho-editor.js +825 -0
  85. package/dist/themes/colors.d.ts +12 -0
  86. package/dist/themes/colors.js +12 -0
  87. package/dist/themes/honchoTheme.d.ts +25 -0
  88. package/dist/themes/honchoTheme.js +94 -0
  89. package/dist/utils/isMobile.d.ts +1 -0
  90. package/dist/utils/isMobile.js +5 -0
  91. 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 {};