@progress/kendo-themes-html 14.5.1-dev.7 → 14.6.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/cjs/colorgradient/demos/colorgradient.js +1 -1
- package/dist/cjs/colorpicker/colorpicker.spec.js +1 -1
- package/dist/cjs/colorpicker/templates/colorpicker-adaptive.js +1 -1
- package/dist/cjs/colorpicker/templates/colorpicker-disabled.js +1 -1
- package/dist/cjs/colorpicker/templates/colorpicker-normal.js +1 -1
- package/dist/cjs/combobox/demos/combobox.js +1 -1
- package/dist/cjs/combobox/templates/combobox-grouping-modern-custom-value.js +1 -1
- package/dist/cjs/filemanager/filemanager-listview.spec.js +1 -1
- package/dist/cjs/floating-toolbar/floating-toolbar.spec.js +1 -1
- package/dist/cjs/imageeditor/imageeditor-option-list.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-option-preview.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-pane.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-placeholder.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-preview-thumbnail.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-resize-handles.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-sidebar.js +1 -0
- package/dist/cjs/imageeditor/imageeditor-toolbar.js +1 -1
- package/dist/cjs/imageeditor/imageeditor.spec.js +1 -1
- package/dist/cjs/imageeditor/templates/imageeditor-adjustments.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-blur.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-crop.js +1 -1
- package/dist/cjs/imageeditor/templates/imageeditor-disabled.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-filters.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-frames.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-insert-line.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-insert-shape.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-insert-text.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-normal.js +1 -1
- package/dist/cjs/imageeditor/templates/imageeditor-pixelate.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-resize.js +1 -1
- package/dist/cjs/imageeditor/templates/imageeditor-rotate.js +1 -0
- package/dist/cjs/imageeditor/templates/imageeditor-shadow.js +1 -0
- package/dist/cjs/index.js +8 -8
- package/dist/cjs/listview/demos/listview.js +1 -1
- package/dist/cjs/listview/listview.spec.js +1 -1
- package/dist/cjs/listview/templates/listview-no-data.js +1 -1
- package/dist/cjs/listview/templates/listview-normal.js +1 -1
- package/dist/cjs/listview/templates/listview-selectable.js +1 -1
- package/dist/cjs/pager/index.js +1 -1
- package/dist/cjs/prompt/templates/prompt-inline-input-only.js +1 -1
- package/dist/cjs/prompt/templates/prompt-inline.js +1 -1
- package/dist/cjs/prompt/templates/prompt-more-actions.js +1 -1
- package/dist/cjs/prompt/templates/prompt-normal.js +1 -1
- package/dist/cjs/prompt/templates/prompt-output.js +1 -1
- package/dist/cjs/prompt/templates/prompt-popup.js +1 -1
- package/dist/cjs/prompt/templates/prompt-settings.js +1 -1
- package/dist/cjs/prompt/templates/prompt-suggestions.js +1 -1
- package/dist/cjs/scheduler/scheduler-toolbar.spec.js +1 -1
- package/dist/cjs/spreadsheet/spreadsheet-action-bar.js +1 -1
- package/dist/cjs/toolbar/demos/toolbar.js +1 -1
- package/dist/cjs/toolbar/templates/toolbar-scrollable-buttons-hidden.js +1 -1
- package/dist/cjs/toolbar/templates/toolbar-scrollable.js +1 -1
- package/dist/esm/colorgradient/demos/colorgradient.mjs +1 -1
- package/dist/esm/colorpicker/colorpicker.spec.mjs +1 -1
- package/dist/esm/colorpicker/templates/colorpicker-adaptive.mjs +1 -1
- package/dist/esm/colorpicker/templates/colorpicker-disabled.mjs +1 -1
- package/dist/esm/colorpicker/templates/colorpicker-normal.mjs +1 -1
- package/dist/esm/combobox/demos/combobox.mjs +1 -1
- package/dist/esm/combobox/templates/combobox-grouping-modern-custom-value.mjs +1 -1
- package/dist/esm/filemanager/filemanager-listview.spec.mjs +1 -1
- package/dist/esm/floating-toolbar/floating-toolbar.spec.mjs +1 -1
- package/dist/esm/imageeditor/imageeditor-option-list.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-option-preview.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-pane.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-placeholder.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-preview-thumbnail.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-resize-handles.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-sidebar.mjs +1 -0
- package/dist/esm/imageeditor/imageeditor-toolbar.mjs +1 -1
- package/dist/esm/imageeditor/imageeditor.spec.mjs +1 -1
- package/dist/esm/imageeditor/templates/imageeditor-adjustments.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-blur.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-crop.mjs +1 -1
- package/dist/esm/imageeditor/templates/imageeditor-disabled.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-filters.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-frames.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-insert-line.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-insert-shape.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-insert-text.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-normal.mjs +1 -1
- package/dist/esm/imageeditor/templates/imageeditor-pixelate.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-resize.mjs +1 -1
- package/dist/esm/imageeditor/templates/imageeditor-rotate.mjs +1 -0
- package/dist/esm/imageeditor/templates/imageeditor-shadow.mjs +1 -0
- package/dist/esm/index.mjs +8 -8
- package/dist/esm/listview/demos/listview.mjs +1 -1
- package/dist/esm/listview/templates/listview-no-data.mjs +1 -1
- package/dist/esm/listview/templates/listview-normal.mjs +1 -1
- package/dist/esm/listview/templates/listview-selectable.mjs +1 -1
- package/dist/esm/pager/index.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-inline-input-only.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-inline.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-more-actions.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-normal.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-output.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-popup.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-settings.mjs +1 -1
- package/dist/esm/prompt/templates/prompt-suggestions.mjs +1 -1
- package/dist/esm/scheduler/scheduler-toolbar.spec.mjs +1 -1
- package/dist/esm/spreadsheet/spreadsheet-action-bar.mjs +1 -1
- package/dist/esm/toolbar/demos/toolbar.mjs +1 -1
- package/dist/esm/toolbar/templates/toolbar-scrollable-buttons-hidden.mjs +1 -1
- package/dist/esm/toolbar/templates/toolbar-scrollable.mjs +1 -1
- package/dist/types/combobox/combobox.spec.d.ts +1 -1
- package/dist/types/imageeditor/imageeditor-option-list.d.ts +18 -0
- package/dist/types/imageeditor/imageeditor-option-preview.d.ts +18 -0
- package/dist/types/imageeditor/imageeditor-pane.d.ts +21 -0
- package/dist/types/imageeditor/imageeditor-placeholder.d.ts +7 -0
- package/dist/types/imageeditor/imageeditor-preview-thumbnail.d.ts +12 -0
- package/dist/types/imageeditor/imageeditor-resize-handles.d.ts +14 -0
- package/dist/types/imageeditor/imageeditor-sidebar.d.ts +11 -0
- package/dist/types/imageeditor/imageeditor-toolbar.d.ts +1 -0
- package/dist/types/imageeditor/imageeditor.spec.d.ts +40 -4
- package/dist/types/imageeditor/index.d.ts +18 -0
- package/dist/types/imageeditor/templates/imageeditor-adjustments.d.ts +1 -0
- package/dist/types/imageeditor/templates/imageeditor-blur.d.ts +1 -0
- package/dist/types/imageeditor/templates/imageeditor-disabled.d.ts +1 -0
- package/dist/types/imageeditor/templates/imageeditor-filters.d.ts +6 -0
- package/dist/types/imageeditor/templates/imageeditor-frames.d.ts +1 -0
- package/dist/types/imageeditor/templates/imageeditor-insert-line.d.ts +2 -0
- package/dist/types/imageeditor/templates/imageeditor-insert-shape.d.ts +2 -0
- package/dist/types/imageeditor/templates/imageeditor-insert-text.d.ts +2 -0
- package/dist/types/imageeditor/templates/imageeditor-pixelate.d.ts +1 -0
- package/dist/types/imageeditor/templates/imageeditor-rotate.d.ts +1 -0
- package/dist/types/imageeditor/templates/imageeditor-shadow.d.ts +1 -0
- package/dist/types/numerictextbox/numerictextbox.spec.d.ts +1 -1
- package/package.json +4 -4
- package/src/combobox/combobox.spec.tsx +2 -2
- package/src/imageeditor/imageeditor-option-list.tsx +53 -0
- package/src/imageeditor/imageeditor-option-preview.tsx +56 -0
- package/src/imageeditor/imageeditor-pane.tsx +70 -0
- package/src/imageeditor/imageeditor-placeholder.tsx +51 -0
- package/src/imageeditor/imageeditor-preview-thumbnail.tsx +42 -0
- package/src/imageeditor/imageeditor-resize-handles.tsx +37 -0
- package/src/imageeditor/imageeditor-sidebar.tsx +66 -0
- package/src/imageeditor/imageeditor-toolbar.tsx +14 -13
- package/src/imageeditor/imageeditor.spec.tsx +79 -13
- package/src/imageeditor/index.ts +19 -0
- package/src/imageeditor/templates/imageeditor-adjustments.tsx +88 -0
- package/src/imageeditor/templates/imageeditor-blur.tsx +92 -0
- package/src/imageeditor/templates/imageeditor-crop.tsx +64 -59
- package/src/imageeditor/templates/imageeditor-disabled.tsx +45 -0
- package/src/imageeditor/templates/imageeditor-filters.tsx +98 -0
- package/src/imageeditor/templates/imageeditor-frames.tsx +180 -0
- package/src/imageeditor/templates/imageeditor-insert-line.tsx +141 -0
- package/src/imageeditor/templates/imageeditor-insert-shape.tsx +195 -0
- package/src/imageeditor/templates/imageeditor-insert-text.tsx +143 -0
- package/src/imageeditor/templates/imageeditor-normal.tsx +20 -1
- package/src/imageeditor/templates/imageeditor-pixelate.tsx +92 -0
- package/src/imageeditor/templates/imageeditor-resize.tsx +68 -50
- package/src/imageeditor/templates/imageeditor-rotate.tsx +98 -0
- package/src/imageeditor/templates/imageeditor-shadow.tsx +96 -0
- package/src/imageeditor/tests/imageeditor-adaptive-small.tsx +373 -0
- package/src/imageeditor/tests/imageeditor-adjustments-pane.tsx +14 -0
- package/src/imageeditor/tests/imageeditor-blur-pane.tsx +29 -0
- package/src/imageeditor/tests/imageeditor-crop-pane.tsx +3 -2
- package/src/imageeditor/tests/imageeditor-export-dialog.tsx +85 -0
- package/src/imageeditor/tests/imageeditor-filters-pane.tsx +14 -0
- package/src/imageeditor/tests/imageeditor-frames-pane.tsx +22 -0
- package/src/imageeditor/tests/imageeditor-insert-line-pane.tsx +52 -0
- package/src/imageeditor/tests/imageeditor-insert-shape-pane.tsx +57 -0
- package/src/imageeditor/tests/imageeditor-insert-text-pane.tsx +51 -0
- package/src/imageeditor/tests/imageeditor-interactive-states.tsx +79 -0
- package/src/imageeditor/tests/imageeditor-option-list-states.tsx +17 -0
- package/src/imageeditor/tests/imageeditor-pixelate-pane.tsx +29 -0
- package/src/imageeditor/tests/imageeditor-resize-pane.tsx +15 -1
- package/src/imageeditor/tests/imageeditor-responsive.tsx +71 -0
- package/src/imageeditor/tests/imageeditor-rotate-pane.tsx +27 -0
- package/src/imageeditor/tests/imageeditor-shadow-pane.tsx +14 -0
- package/src/imageeditor/tests/imageeditor-sidebar-scrollable.tsx +97 -0
- package/src/numerictextbox/numerictextbox.spec.tsx +2 -2
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { ImageEditor, ImageEditorPane, ImageEditorOptionPreview, ImageEditorPreviewThumbnail } from "..";
|
|
2
|
+
import { Button } from "../../button";
|
|
3
|
+
import { Form, FormField } from "../../form";
|
|
4
|
+
|
|
5
|
+
const filtersSidebarItems = [
|
|
6
|
+
<Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
|
|
7
|
+
<Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
|
|
8
|
+
<Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
|
|
9
|
+
<div className="k-separator" key="sidebar-separator-1"></div>,
|
|
10
|
+
<Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
|
|
11
|
+
<Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes"></Button>,
|
|
12
|
+
<div className="k-separator" key="sidebar-separator-2"></div>,
|
|
13
|
+
<Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
|
|
14
|
+
<Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
|
|
15
|
+
<Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" selected aria-label="Filters"></Button>,
|
|
16
|
+
<div className="k-separator" key="sidebar-separator-3"></div>,
|
|
17
|
+
<Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
|
|
18
|
+
<Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export const filterPresets: { [key: string]: { label: string } } = {
|
|
22
|
+
"none": { label: "None" },
|
|
23
|
+
"black-white": { label: "Black and White" },
|
|
24
|
+
"greyscale": { label: "Greyscale" },
|
|
25
|
+
"sepia": { label: "Sepia" },
|
|
26
|
+
"warm": { label: "Warm" },
|
|
27
|
+
"cold": { label: "Cold" },
|
|
28
|
+
"chrome": { label: "Chrome" },
|
|
29
|
+
"invert": { label: "Invert" }
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const FilterPreview = ({ presetKey, selected }: { presetKey: string; selected: boolean }) => {
|
|
33
|
+
const preset = filterPresets[presetKey];
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<ImageEditorOptionPreview key={presetKey} selected={selected} aria-label={preset.label}>
|
|
37
|
+
<ImageEditorPreviewThumbnail label={preset.label} />
|
|
38
|
+
</ImageEditorOptionPreview>
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const ImageEditorFilters = ({ preset = "greyscale", ...props }: any) => (
|
|
43
|
+
<ImageEditor
|
|
44
|
+
sidebarItems={filtersSidebarItems}
|
|
45
|
+
actionPane={
|
|
46
|
+
<ImageEditorPane title="Filters" actions={
|
|
47
|
+
<>
|
|
48
|
+
<Button>Reset</Button>
|
|
49
|
+
<Button themeColor="primary">Apply</Button>
|
|
50
|
+
</>
|
|
51
|
+
}>
|
|
52
|
+
<Form tag="div">
|
|
53
|
+
<FormField
|
|
54
|
+
editor={
|
|
55
|
+
<div className="k-imageeditor-option-grid">
|
|
56
|
+
<FilterPreview presetKey="none" selected={preset === "none"} />
|
|
57
|
+
</div>
|
|
58
|
+
}
|
|
59
|
+
/>
|
|
60
|
+
<FormField
|
|
61
|
+
label="Monochrome"
|
|
62
|
+
editor={
|
|
63
|
+
<div className="k-imageeditor-option-grid">
|
|
64
|
+
<FilterPreview presetKey="black-white" selected={preset === "black-white"} />
|
|
65
|
+
<FilterPreview presetKey="greyscale" selected={preset === "greyscale"} />
|
|
66
|
+
<FilterPreview presetKey="sepia" selected={preset === "sepia"} />
|
|
67
|
+
</div>
|
|
68
|
+
}
|
|
69
|
+
/>
|
|
70
|
+
<FormField
|
|
71
|
+
label="Color Temperature & Mood"
|
|
72
|
+
editor={
|
|
73
|
+
<div className="k-imageeditor-option-grid">
|
|
74
|
+
<FilterPreview presetKey="warm" selected={preset === "warm"} />
|
|
75
|
+
<FilterPreview presetKey="cold" selected={preset === "cold"} />
|
|
76
|
+
<FilterPreview presetKey="chrome" selected={preset === "chrome"} />
|
|
77
|
+
</div>
|
|
78
|
+
}
|
|
79
|
+
/>
|
|
80
|
+
<FormField
|
|
81
|
+
label="Color Reversal"
|
|
82
|
+
editor={
|
|
83
|
+
<div className="k-imageeditor-option-grid">
|
|
84
|
+
<FilterPreview presetKey="invert" selected={preset === "invert"} />
|
|
85
|
+
</div>
|
|
86
|
+
}
|
|
87
|
+
/>
|
|
88
|
+
</Form>
|
|
89
|
+
</ImageEditorPane>
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
children={
|
|
93
|
+
<>
|
|
94
|
+
<canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
|
|
95
|
+
</>
|
|
96
|
+
}
|
|
97
|
+
{...props} />
|
|
98
|
+
);
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { ImageEditor, ImageEditorPane, ImageEditorOptionPreview, ImageEditorPreviewThumbnail } from "..";
|
|
2
|
+
import { Button } from "../../button";
|
|
3
|
+
import { NumericTextbox } from "../../numerictextbox";
|
|
4
|
+
import { ColorPicker } from "../../colorpicker";
|
|
5
|
+
import { DropdownList } from "../../dropdownlist";
|
|
6
|
+
import { Form, FormField, Fieldset } from "../../form";
|
|
7
|
+
import { Icon } from "../../icon";
|
|
8
|
+
import { Slider } from "../../slider";
|
|
9
|
+
|
|
10
|
+
const framesSidebarItems = [
|
|
11
|
+
<Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
|
|
12
|
+
<Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
|
|
13
|
+
<Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
|
|
14
|
+
<div className="k-separator" key="sidebar-separator-1"></div>,
|
|
15
|
+
<Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
|
|
16
|
+
<Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes"></Button>,
|
|
17
|
+
<div className="k-separator" key="sidebar-separator-2"></div>,
|
|
18
|
+
<Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
|
|
19
|
+
<Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
|
|
20
|
+
<Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
|
|
21
|
+
<div className="k-separator" key="sidebar-separator-3"></div>,
|
|
22
|
+
<Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" selected aria-label="Frame"></Button>,
|
|
23
|
+
<Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
const FrameSlider = ({ id, label, value }: { id: string; label: string; value: number }) => (
|
|
27
|
+
<FormField
|
|
28
|
+
label={label}
|
|
29
|
+
editorId={id}
|
|
30
|
+
editor={
|
|
31
|
+
<div className="k-imageeditor-field-row">
|
|
32
|
+
<Slider
|
|
33
|
+
style={{ flex: 1, "--kendo-slider-start": 0, "--kendo-slider-end": value } as React.CSSProperties}
|
|
34
|
+
aria-label={label}
|
|
35
|
+
showButtons={false}
|
|
36
|
+
showTicks={false}
|
|
37
|
+
value={value}
|
|
38
|
+
min={0}
|
|
39
|
+
max={100}
|
|
40
|
+
/>
|
|
41
|
+
<NumericTextbox
|
|
42
|
+
id={id}
|
|
43
|
+
style={{ width: "80px", flex: "none" }}
|
|
44
|
+
showClearButton={false}
|
|
45
|
+
showSpinButton={false}
|
|
46
|
+
value={String(value)}
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const frameStylePreviews: { [key: string]: React.CSSProperties } = {
|
|
54
|
+
none: {},
|
|
55
|
+
single: { border: "3px dashed #b0e855", borderRadius: "4px" },
|
|
56
|
+
multiple: { border: "3px dashed #b0e855", borderRadius: "4px" }
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const FrameStylePreview = ({ styleKey, label, selected }: { styleKey: string; label: string; selected: boolean }) => (
|
|
60
|
+
<ImageEditorOptionPreview selected={selected} aria-label={label}>
|
|
61
|
+
<ImageEditorPreviewThumbnail label={label} style={frameStylePreviews[styleKey]}>
|
|
62
|
+
{styleKey === "multiple" && (
|
|
63
|
+
<span style={{
|
|
64
|
+
position: "absolute",
|
|
65
|
+
inset: "6px",
|
|
66
|
+
border: "3px dashed #b0e855",
|
|
67
|
+
borderRadius: "1px",
|
|
68
|
+
boxSizing: "border-box",
|
|
69
|
+
pointerEvents: "none"
|
|
70
|
+
}}></span>
|
|
71
|
+
)}
|
|
72
|
+
</ImageEditorPreviewThumbnail>
|
|
73
|
+
</ImageEditorOptionPreview>
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
export const ImageEditorFrames = ({
|
|
77
|
+
style = "single",
|
|
78
|
+
imageRoundness = 24,
|
|
79
|
+
framesAmount = 3,
|
|
80
|
+
frameThickness = 12,
|
|
81
|
+
frameRoundness = style === "multiple" ? 40 : 16,
|
|
82
|
+
offset = 12,
|
|
83
|
+
strokeColor = "#b0e855",
|
|
84
|
+
...props
|
|
85
|
+
}: any) => {
|
|
86
|
+
const framePadding = 0;
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<ImageEditor
|
|
90
|
+
sidebarItems={framesSidebarItems}
|
|
91
|
+
actionPane={
|
|
92
|
+
<ImageEditorPane title="Frame" actions={
|
|
93
|
+
<>
|
|
94
|
+
<Button>Reset</Button>
|
|
95
|
+
<Button themeColor="primary">Apply</Button>
|
|
96
|
+
</>
|
|
97
|
+
}>
|
|
98
|
+
<Form tag="div">
|
|
99
|
+
<FormField
|
|
100
|
+
label="Frame Style"
|
|
101
|
+
editor={
|
|
102
|
+
<div className="k-imageeditor-option-grid">
|
|
103
|
+
<FrameStylePreview styleKey="none" label="None" selected={style === "none"} />
|
|
104
|
+
<FrameStylePreview styleKey="single" label="Single" selected={style === "single"} />
|
|
105
|
+
<FrameStylePreview styleKey="multiple" label="Multiple" selected={style === "multiple"} />
|
|
106
|
+
</div>
|
|
107
|
+
}
|
|
108
|
+
/>
|
|
109
|
+
<FrameSlider id="frame-image-roundness" label="Image Roundness" value={imageRoundness} />
|
|
110
|
+
{style === "multiple" && (
|
|
111
|
+
<FormField
|
|
112
|
+
label="Frames Amount"
|
|
113
|
+
editorId="frame-frames-amount"
|
|
114
|
+
editor={
|
|
115
|
+
<NumericTextbox id="frame-frames-amount" showClearButton={false} value={String(framesAmount)} />
|
|
116
|
+
}
|
|
117
|
+
/>
|
|
118
|
+
)}
|
|
119
|
+
{style !== "none" && (
|
|
120
|
+
<>
|
|
121
|
+
<FrameSlider id="frame-thickness" label="Frame Thickness" value={frameThickness} />
|
|
122
|
+
<FrameSlider id="frame-roundness" label="Frame Roundness" value={frameRoundness} />
|
|
123
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
124
|
+
<FormField
|
|
125
|
+
label="Stroke Type"
|
|
126
|
+
editor={ <DropdownList id="frame-stroke-type" value="Dashed" prefix={<Icon icon="border-style" />} aria-label="Stroke Type" /> }
|
|
127
|
+
/>
|
|
128
|
+
<FormField
|
|
129
|
+
label="Offset"
|
|
130
|
+
editorId="frame-offset"
|
|
131
|
+
editor={ <NumericTextbox id="frame-offset" showSpinButton={false} value={String(offset)} prefix={<Icon icon="max-width" />} /> }
|
|
132
|
+
/>
|
|
133
|
+
</Fieldset>
|
|
134
|
+
<FormField
|
|
135
|
+
label="Stroke Color"
|
|
136
|
+
editor={ <ColorPicker id="frame-stroke-color" value={strokeColor} aria-label="Stroke Color" /> }
|
|
137
|
+
/>
|
|
138
|
+
</>
|
|
139
|
+
)}
|
|
140
|
+
</Form>
|
|
141
|
+
</ImageEditorPane>
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
children={
|
|
145
|
+
style === "none" ? (
|
|
146
|
+
<canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover", borderRadius: `${imageRoundness}px` }}></canvas>
|
|
147
|
+
) : (
|
|
148
|
+
<div style={{ position: "relative", width: `${494 + framePadding * 2}px`, height: `${307 + framePadding * 2}px` }}>
|
|
149
|
+
<canvas width="494" height="307" role="img" aria-label="Image being edited" style={{
|
|
150
|
+
position: "absolute", top: `${framePadding}px`, left: `${framePadding}px`,
|
|
151
|
+
backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover",
|
|
152
|
+
borderRadius: `${imageRoundness}px`
|
|
153
|
+
}}></canvas>
|
|
154
|
+
{/* inner ring sits flush on the image edge, overlaying it */}
|
|
155
|
+
<div style={{
|
|
156
|
+
position: "absolute",
|
|
157
|
+
top: `${framePadding}px`, left: `${framePadding}px`,
|
|
158
|
+
width: "494px", height: "307px",
|
|
159
|
+
border: `${frameThickness}px dashed ${strokeColor}`,
|
|
160
|
+
borderRadius: `${frameRoundness}px`,
|
|
161
|
+
boxSizing: "border-box",
|
|
162
|
+
pointerEvents: "none"
|
|
163
|
+
}}></div>
|
|
164
|
+
{style === "multiple" && (
|
|
165
|
+
<div style={{
|
|
166
|
+
position: "absolute",
|
|
167
|
+
top: `${framePadding + frameThickness + offset}px`, left: `${framePadding + frameThickness + offset}px`,
|
|
168
|
+
width: `${494 - (frameThickness + offset) * 2}px`, height: `${307 - (frameThickness + offset) * 2}px`,
|
|
169
|
+
border: `${frameThickness}px dashed ${strokeColor}`,
|
|
170
|
+
borderRadius: `${Math.max(frameRoundness - frameThickness - offset, 0)}px`,
|
|
171
|
+
boxSizing: "border-box",
|
|
172
|
+
pointerEvents: "none"
|
|
173
|
+
}}></div>
|
|
174
|
+
)}
|
|
175
|
+
</div>
|
|
176
|
+
)
|
|
177
|
+
}
|
|
178
|
+
{...props} />
|
|
179
|
+
);
|
|
180
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { ImageEditor, ImageEditorPane } from "..";
|
|
2
|
+
import { Button } from "../../button";
|
|
3
|
+
import { ButtonGroup } from "../../button-group";
|
|
4
|
+
import { NumericTextbox } from "../../numerictextbox";
|
|
5
|
+
import { ColorPicker } from "../../colorpicker";
|
|
6
|
+
import { DropdownList } from "../../dropdownlist";
|
|
7
|
+
import { Form, FormField, Fieldset } from "../../form";
|
|
8
|
+
import { Icon } from "../../icon";
|
|
9
|
+
import { SegmentedControl, SegmentedControlButton } from "../../segmented-control";
|
|
10
|
+
import { FloatingToolbar } from "../../floating-toolbar/floating-toolbar.spec";
|
|
11
|
+
|
|
12
|
+
const insertLineSidebarItems = [
|
|
13
|
+
<Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
|
|
14
|
+
<Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
|
|
15
|
+
<Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
|
|
16
|
+
<div className="k-separator" key="sidebar-separator-1"></div>,
|
|
17
|
+
<Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
|
|
18
|
+
<Button fillMode="flat" key="sidebar-button-5" icon="shapes" selected aria-label="Shapes"></Button>,
|
|
19
|
+
<div className="k-separator" key="sidebar-separator-2"></div>,
|
|
20
|
+
<Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
|
|
21
|
+
<Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
|
|
22
|
+
<Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
|
|
23
|
+
<div className="k-separator" key="sidebar-separator-3"></div>,
|
|
24
|
+
<Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
|
|
25
|
+
<Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
export const ImageEditorInsertLine = (props: any) => (
|
|
29
|
+
<ImageEditor
|
|
30
|
+
sidebarItems={insertLineSidebarItems}
|
|
31
|
+
actionPane={
|
|
32
|
+
<ImageEditorPane title="Shapes and Lines" actions={
|
|
33
|
+
<>
|
|
34
|
+
<Button>Remove</Button>
|
|
35
|
+
<Button themeColor="primary">Insert</Button>
|
|
36
|
+
</>
|
|
37
|
+
}>
|
|
38
|
+
<SegmentedControl thumbStyles={{ width: "50%", left: "50%" }} stretched aria-label="Shape or Line" style={{ flexShrink: 0 }}>
|
|
39
|
+
<SegmentedControlButton icon="shapes">Shape</SegmentedControlButton>
|
|
40
|
+
<SegmentedControlButton icon="shape-line" selected>Line</SegmentedControlButton>
|
|
41
|
+
</SegmentedControl>
|
|
42
|
+
|
|
43
|
+
<Form tag="div">
|
|
44
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
45
|
+
<FormField
|
|
46
|
+
label="Stroke Color"
|
|
47
|
+
editor={ <ColorPicker id="line-stroke-color" value="#b0e855" aria-label="Stroke Color" /> }
|
|
48
|
+
/>
|
|
49
|
+
<FormField
|
|
50
|
+
label="Stroke Width"
|
|
51
|
+
editorId="line-stroke-width"
|
|
52
|
+
editor={ <NumericTextbox id="line-stroke-width" showSpinButton={false} value="8" prefix={<Icon icon="border-width" />} /> }
|
|
53
|
+
/>
|
|
54
|
+
</Fieldset>
|
|
55
|
+
<FormField
|
|
56
|
+
label="Stroke Type"
|
|
57
|
+
editor={ <DropdownList id="line-stroke-type" value="Dotted" prefix={<Icon icon="square-dotted" />} aria-label="Stroke Type" /> }
|
|
58
|
+
/>
|
|
59
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
60
|
+
<FormField
|
|
61
|
+
label="Start Point"
|
|
62
|
+
editor={ <DropdownList id="line-start-point" value="Circle" prefix={<Icon icon="line-point-circle" />} aria-label="Start Point" /> }
|
|
63
|
+
/>
|
|
64
|
+
<FormField
|
|
65
|
+
label="End Point"
|
|
66
|
+
editor={ <DropdownList id="line-end-point" value="Diamond" prefix={<Icon icon="line-point-rhombus" />} aria-label="End Point" /> }
|
|
67
|
+
/>
|
|
68
|
+
</Fieldset>
|
|
69
|
+
<FormField
|
|
70
|
+
label="Opacity"
|
|
71
|
+
editor={ <NumericTextbox id="line-opacity" showSpinButton={false} value="100%" prefix={<Icon icon="transparency" />} aria-label="Opacity" /> }
|
|
72
|
+
/>
|
|
73
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
74
|
+
<FormField
|
|
75
|
+
label="Align"
|
|
76
|
+
editor={
|
|
77
|
+
<ButtonGroup>
|
|
78
|
+
<Button className="k-group-start" icon="align-items-start" aria-label="Align Left"></Button>
|
|
79
|
+
<Button icon="align-items-center" selected aria-label="Align Center"></Button>
|
|
80
|
+
<Button className="k-group-end" icon="align-items-end" aria-label="Align Right"></Button>
|
|
81
|
+
</ButtonGroup>
|
|
82
|
+
}
|
|
83
|
+
/>
|
|
84
|
+
<FormField
|
|
85
|
+
label="Align Vertical"
|
|
86
|
+
editor={
|
|
87
|
+
<ButtonGroup>
|
|
88
|
+
<Button className="k-group-start" icon="align-items-start-alt" aria-label="Align Top"></Button>
|
|
89
|
+
<Button icon="align-items-center-alt" selected aria-label="Align Middle"></Button>
|
|
90
|
+
<Button className="k-group-end" icon="align-items-end-alt" aria-label="Align Bottom"></Button>
|
|
91
|
+
</ButtonGroup>
|
|
92
|
+
}
|
|
93
|
+
/>
|
|
94
|
+
</Fieldset>
|
|
95
|
+
</Form>
|
|
96
|
+
</ImageEditorPane>
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
children={
|
|
100
|
+
<>
|
|
101
|
+
<canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
|
|
102
|
+
<div style={{ position: "absolute", top: "150px", left: "90px", width: "220px", height: "0" }}>
|
|
103
|
+
<div style={{
|
|
104
|
+
position: "absolute", left: "0", right: "0", top: "-1px", height: "2px",
|
|
105
|
+
background: "#5558e8"
|
|
106
|
+
}}></div>
|
|
107
|
+
<div style={{
|
|
108
|
+
position: "absolute", left: "0", right: "0", top: "-4px", height: "8px",
|
|
109
|
+
backgroundImage: "radial-gradient(circle, #b0e855 45%, transparent 46%)",
|
|
110
|
+
backgroundSize: "16px 8px", backgroundRepeat: "repeat-x", backgroundPosition: "left center"
|
|
111
|
+
}}></div>
|
|
112
|
+
<span style={{
|
|
113
|
+
position: "absolute", left: "-7px", top: "-7px",
|
|
114
|
+
width: "14px", height: "14px", borderRadius: "50%",
|
|
115
|
+
background: "#fff", border: "2px solid #5558e8", boxSizing: "border-box"
|
|
116
|
+
}}></span>
|
|
117
|
+
<span style={{
|
|
118
|
+
position: "absolute", right: "-9px", top: "-9px",
|
|
119
|
+
width: "18px", height: "18px", transform: "rotate(45deg)",
|
|
120
|
+
background: "#b0e855", border: "2px solid #5558e8", boxSizing: "border-box"
|
|
121
|
+
}}>
|
|
122
|
+
<span style={{
|
|
123
|
+
position: "absolute", left: "50%", top: "50%",
|
|
124
|
+
width: "5px", height: "5px", borderRadius: "50%",
|
|
125
|
+
background: "#fff", transform: "translate(-50%, -50%)"
|
|
126
|
+
}}></span>
|
|
127
|
+
</span>
|
|
128
|
+
<FloatingToolbar fillMode="flat" resizable offset={{ top: "36px", left: "-10px" }}>
|
|
129
|
+
<Button fillMode="flat" icon="copy" aria-label="Duplicate"></Button>
|
|
130
|
+
<Button fillMode="flat" icon="pencil" aria-label="Edit"></Button>
|
|
131
|
+
<Button fillMode="flat" icon="flip-horizontal" aria-label="Flip Horizontal"></Button>
|
|
132
|
+
<Button fillMode="flat" icon="flip-vertical" aria-label="Flip Vertical"></Button>
|
|
133
|
+
<Button fillMode="flat" icon="trash" aria-label="Delete"></Button>
|
|
134
|
+
</FloatingToolbar>
|
|
135
|
+
</div>
|
|
136
|
+
</>
|
|
137
|
+
}
|
|
138
|
+
{...props} />
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
export default ImageEditorInsertLine;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { ImageEditor, ImageEditorPane, ImageEditorOptionList, ImageEditorOptionPreview, ImageEditorResizeHandles } from "..";
|
|
2
|
+
import { Button } from "../../button";
|
|
3
|
+
import { ButtonGroup } from "../../button-group";
|
|
4
|
+
import { Combobox } from "../../combobox";
|
|
5
|
+
import { NumericTextbox } from "../../numerictextbox";
|
|
6
|
+
import { ColorPicker } from "../../colorpicker";
|
|
7
|
+
import { Form, FormField, Fieldset } from "../../form";
|
|
8
|
+
import { Icon } from "../../icon";
|
|
9
|
+
import { SegmentedControl, SegmentedControlButton } from "../../segmented-control";
|
|
10
|
+
import { FloatingToolbar } from "../../floating-toolbar/floating-toolbar.spec";
|
|
11
|
+
|
|
12
|
+
const insertShapeSidebarItems = [
|
|
13
|
+
<Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
|
|
14
|
+
<Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
|
|
15
|
+
<Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
|
|
16
|
+
<div className="k-separator" key="sidebar-separator-1"></div>,
|
|
17
|
+
<Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
|
|
18
|
+
<Button fillMode="flat" key="sidebar-button-5" icon="shapes" selected aria-label="Shapes"></Button>,
|
|
19
|
+
<div className="k-separator" key="sidebar-separator-2"></div>,
|
|
20
|
+
<Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
|
|
21
|
+
<Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
|
|
22
|
+
<Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
|
|
23
|
+
<div className="k-separator" key="sidebar-separator-3"></div>,
|
|
24
|
+
<Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
|
|
25
|
+
<Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const shapeTypes = [
|
|
29
|
+
{ label: "Square", icon: "checkbox" },
|
|
30
|
+
{ label: "Rectangle", icon: "rectangle-shape" },
|
|
31
|
+
{ label: "Circle", icon: "circle-shape" },
|
|
32
|
+
{ label: "Oval", icon: "oval-shape" },
|
|
33
|
+
{ label: "Triangle", icon: "kpi-status-hold" },
|
|
34
|
+
{ label: "Star", icon: "star" },
|
|
35
|
+
{ label: "Heart", icon: "heart" },
|
|
36
|
+
{ label: "Diamond", icon: "kpi-status-deny" },
|
|
37
|
+
{ label: "Hexagon", icon: "hexagon-shape" },
|
|
38
|
+
{ label: "Pentagon", icon: "pentagon-shape" },
|
|
39
|
+
{ label: "Arrow", icon: "arrow-right" }
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
export const ImageEditorInsertShape = (props: any) => (
|
|
43
|
+
<ImageEditor
|
|
44
|
+
sidebarItems={insertShapeSidebarItems}
|
|
45
|
+
actionPane={
|
|
46
|
+
<ImageEditorPane title="Shapes and Lines" actions={
|
|
47
|
+
<>
|
|
48
|
+
<Button>Remove</Button>
|
|
49
|
+
<Button themeColor="primary">Insert</Button>
|
|
50
|
+
</>
|
|
51
|
+
}>
|
|
52
|
+
<SegmentedControl thumbStyles={{ width: "50%" }} stretched aria-label="Shape or Line" style={{ flexShrink: 0 }}>
|
|
53
|
+
<SegmentedControlButton icon="shapes" selected>Shape</SegmentedControlButton>
|
|
54
|
+
<SegmentedControlButton icon="shape-line">Line</SegmentedControlButton>
|
|
55
|
+
</SegmentedControl>
|
|
56
|
+
|
|
57
|
+
<Form tag="div">
|
|
58
|
+
<FormField
|
|
59
|
+
label="Type"
|
|
60
|
+
editor={
|
|
61
|
+
<ImageEditorOptionList scrollable scrollableEnd>
|
|
62
|
+
{shapeTypes.map((shape) => (
|
|
63
|
+
<ImageEditorOptionPreview key={shape.label} selected={shape.label === "Circle"}>
|
|
64
|
+
<div className="k-imageeditor-option-content">
|
|
65
|
+
<Icon icon={shape.icon} />
|
|
66
|
+
<span className="k-imageeditor-option-label">{shape.label}</span>
|
|
67
|
+
</div>
|
|
68
|
+
</ImageEditorOptionPreview>
|
|
69
|
+
))}
|
|
70
|
+
</ImageEditorOptionList>
|
|
71
|
+
}
|
|
72
|
+
/>
|
|
73
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
74
|
+
<FormField
|
|
75
|
+
label="Stroke Color"
|
|
76
|
+
editor={ <ColorPicker id="shape-stroke-color" value="#b0e855" aria-label="Stroke Color" /> }
|
|
77
|
+
/>
|
|
78
|
+
<FormField
|
|
79
|
+
label="Stroke Width"
|
|
80
|
+
editorId="shape-stroke-width"
|
|
81
|
+
editor={ <NumericTextbox id="shape-stroke-width" showSpinButton={false} value="8" prefix={<Icon icon="border-width" />} /> }
|
|
82
|
+
/>
|
|
83
|
+
</Fieldset>
|
|
84
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
85
|
+
<FormField
|
|
86
|
+
label="Fill Color"
|
|
87
|
+
editor={ <ColorPicker id="shape-fill-color" value="#eae382" valueIconName="droplet" aria-label="Fill Color" /> }
|
|
88
|
+
/>
|
|
89
|
+
<FormField
|
|
90
|
+
label="Text Color"
|
|
91
|
+
editor={ <ColorPicker id="shape-text-color" value="#4a4500" valueIconName="foreground-color" aria-label="Text Color" /> }
|
|
92
|
+
/>
|
|
93
|
+
</Fieldset>
|
|
94
|
+
<FormField
|
|
95
|
+
label="Font Family"
|
|
96
|
+
editorId="shape-font-family"
|
|
97
|
+
editor={ <Combobox id="shape-font-family" prefix={<Icon icon="font-family" />} value="Trebuchet MS" /> }
|
|
98
|
+
/>
|
|
99
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
100
|
+
<FormField
|
|
101
|
+
label="Font Size"
|
|
102
|
+
editorId="shape-font-size"
|
|
103
|
+
editor={ <NumericTextbox id="shape-font-size" showSpinButton={false} value="24" prefix={<Icon icon="font-size" />} /> }
|
|
104
|
+
/>
|
|
105
|
+
<FormField
|
|
106
|
+
label="Alignment"
|
|
107
|
+
editor={
|
|
108
|
+
<ButtonGroup>
|
|
109
|
+
<Button className="k-group-start" icon="align-left" aria-label="Align Left"></Button>
|
|
110
|
+
<Button icon="align-center" selected aria-label="Align Center"></Button>
|
|
111
|
+
<Button className="k-group-end" icon="align-right" aria-label="Align Right"></Button>
|
|
112
|
+
</ButtonGroup>
|
|
113
|
+
}
|
|
114
|
+
/>
|
|
115
|
+
</Fieldset>
|
|
116
|
+
<FormField
|
|
117
|
+
label="Format"
|
|
118
|
+
editor={
|
|
119
|
+
<div className="k-imageeditor-controls">
|
|
120
|
+
<Button icon="bold" aria-label="Bold"></Button>
|
|
121
|
+
<Button icon="italic" aria-label="Italic"></Button>
|
|
122
|
+
<Button icon="underline" aria-label="Underline"></Button>
|
|
123
|
+
<Button icon="strikethrough" aria-label="Strikethrough"></Button>
|
|
124
|
+
<Button icon="convert-uppercase" aria-label="Uppercase"></Button>
|
|
125
|
+
<Button icon="convert-lowercase" aria-label="Lowercase"></Button>
|
|
126
|
+
</div>
|
|
127
|
+
}
|
|
128
|
+
/>
|
|
129
|
+
<Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
|
|
130
|
+
<FormField
|
|
131
|
+
label="Align Horizontal"
|
|
132
|
+
editor={
|
|
133
|
+
<ButtonGroup>
|
|
134
|
+
<Button className="k-group-start" icon="align-items-start" aria-label="Align Left"></Button>
|
|
135
|
+
<Button icon="align-items-center" aria-label="Align Center"></Button>
|
|
136
|
+
<Button className="k-group-end" icon="align-items-end" aria-label="Align Right"></Button>
|
|
137
|
+
</ButtonGroup>
|
|
138
|
+
}
|
|
139
|
+
/>
|
|
140
|
+
<FormField
|
|
141
|
+
label="Align Vertical"
|
|
142
|
+
editor={
|
|
143
|
+
<ButtonGroup>
|
|
144
|
+
<Button className="k-group-start" icon="align-items-start-alt" aria-label="Align Top"></Button>
|
|
145
|
+
<Button icon="align-items-center-alt" aria-label="Align Middle"></Button>
|
|
146
|
+
<Button className="k-group-end" icon="align-items-end-alt" aria-label="Align Bottom"></Button>
|
|
147
|
+
</ButtonGroup>
|
|
148
|
+
}
|
|
149
|
+
/>
|
|
150
|
+
</Fieldset>
|
|
151
|
+
</Form>
|
|
152
|
+
</ImageEditorPane>
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
children={
|
|
156
|
+
<>
|
|
157
|
+
<canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
|
|
158
|
+
<div className="k-imageeditor-resize" style={{ width: "165px", height: "54px", top: "140px", left: "165px" }}>
|
|
159
|
+
<div style={{
|
|
160
|
+
width: "100%",
|
|
161
|
+
height: "100%",
|
|
162
|
+
borderRadius: "50%",
|
|
163
|
+
background: "#eae382",
|
|
164
|
+
border: "2px solid #b0e855",
|
|
165
|
+
boxSizing: "border-box"
|
|
166
|
+
}}>
|
|
167
|
+
<p style={{
|
|
168
|
+
margin: 0,
|
|
169
|
+
width: "100%",
|
|
170
|
+
height: "100%",
|
|
171
|
+
display: "flex",
|
|
172
|
+
alignItems: "center",
|
|
173
|
+
justifyContent: "center",
|
|
174
|
+
fontFamily: "'Trebuchet MS', sans-serif",
|
|
175
|
+
fontSize: "16px",
|
|
176
|
+
lineHeight: 1,
|
|
177
|
+
color: "#4a4500",
|
|
178
|
+
whiteSpace: "nowrap"
|
|
179
|
+
}}>Shape text</p>
|
|
180
|
+
</div>
|
|
181
|
+
<ImageEditorResizeHandles variant="mixed" />
|
|
182
|
+
<FloatingToolbar fillMode="flat" resizable offset={{ top: "62px", left: "0" }}>
|
|
183
|
+
<Button fillMode="flat" icon="copy" aria-label="Duplicate"></Button>
|
|
184
|
+
<Button fillMode="flat" icon="pencil" aria-label="Edit"></Button>
|
|
185
|
+
<Button fillMode="flat" icon="flip-horizontal" aria-label="Flip Horizontal"></Button>
|
|
186
|
+
<Button fillMode="flat" icon="flip-vertical" aria-label="Flip Vertical"></Button>
|
|
187
|
+
<Button fillMode="flat" icon="trash" aria-label="Delete"></Button>
|
|
188
|
+
</FloatingToolbar>
|
|
189
|
+
</div>
|
|
190
|
+
</>
|
|
191
|
+
}
|
|
192
|
+
{...props} />
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
export default ImageEditorInsertShape;
|