@progress/kendo-themes-html 14.7.0-dev.14 → 14.7.0-dev.15

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 (152) hide show
  1. package/dist/cjs/imageeditor/imageeditor-canvas.spec.js +1 -0
  2. package/dist/cjs/imageeditor/imageeditor-option-list.js +1 -1
  3. package/dist/cjs/imageeditor/imageeditor-pane.js +1 -1
  4. package/dist/cjs/imageeditor/imageeditor-preview-thumbnail.js +1 -1
  5. package/dist/cjs/imageeditor/imageeditor-sidebar.js +1 -1
  6. package/dist/cjs/imageeditor/imageeditor-toolbar.js +1 -1
  7. package/dist/cjs/imageeditor/imageeditor.spec.js +1 -1
  8. package/dist/cjs/imageeditor/templates/imageeditor-adjustments-adaptive.js +1 -0
  9. package/dist/cjs/imageeditor/templates/imageeditor-adjustments.js +1 -1
  10. package/dist/cjs/imageeditor/templates/imageeditor-blur-adaptive.js +1 -0
  11. package/dist/cjs/imageeditor/templates/imageeditor-blur.js +1 -1
  12. package/dist/cjs/imageeditor/templates/imageeditor-crop-adaptive.js +1 -0
  13. package/dist/cjs/imageeditor/templates/imageeditor-crop.js +1 -1
  14. package/dist/cjs/imageeditor/templates/imageeditor-filters-adaptive.js +1 -0
  15. package/dist/cjs/imageeditor/templates/imageeditor-filters.js +1 -1
  16. package/dist/cjs/imageeditor/templates/imageeditor-frames-adaptive.js +1 -0
  17. package/dist/cjs/imageeditor/templates/imageeditor-frames.js +1 -1
  18. package/dist/cjs/imageeditor/templates/imageeditor-insert-line-adaptive.js +1 -0
  19. package/dist/cjs/imageeditor/templates/imageeditor-insert-line.js +1 -1
  20. package/dist/cjs/imageeditor/templates/imageeditor-insert-shape-adaptive.js +1 -0
  21. package/dist/cjs/imageeditor/templates/imageeditor-insert-shape.js +1 -1
  22. package/dist/cjs/imageeditor/templates/imageeditor-insert-text-adaptive.js +1 -0
  23. package/dist/cjs/imageeditor/templates/imageeditor-insert-text.js +1 -1
  24. package/dist/cjs/imageeditor/templates/imageeditor-normal.js +1 -1
  25. package/dist/cjs/imageeditor/templates/imageeditor-pixelate-adaptive.js +1 -0
  26. package/dist/cjs/imageeditor/templates/imageeditor-pixelate.js +1 -1
  27. package/dist/cjs/imageeditor/templates/imageeditor-resize-adaptive.js +1 -0
  28. package/dist/cjs/imageeditor/templates/imageeditor-resize.js +1 -1
  29. package/dist/cjs/imageeditor/templates/imageeditor-rotate-adaptive.js +1 -0
  30. package/dist/cjs/imageeditor/templates/imageeditor-rotate.js +1 -1
  31. package/dist/cjs/imageeditor/templates/imageeditor-shadow-adaptive.js +1 -0
  32. package/dist/cjs/imageeditor/templates/imageeditor-shadow.js +1 -1
  33. package/dist/cjs/index.js +8 -8
  34. package/dist/esm/imageeditor/imageeditor-canvas.spec.mjs +1 -0
  35. package/dist/esm/imageeditor/imageeditor-option-list.mjs +1 -1
  36. package/dist/esm/imageeditor/imageeditor-pane.mjs +1 -1
  37. package/dist/esm/imageeditor/imageeditor-preview-thumbnail.mjs +1 -1
  38. package/dist/esm/imageeditor/imageeditor-sidebar.mjs +1 -1
  39. package/dist/esm/imageeditor/imageeditor-toolbar.mjs +1 -1
  40. package/dist/esm/imageeditor/imageeditor.spec.mjs +1 -1
  41. package/dist/esm/imageeditor/templates/imageeditor-adjustments-adaptive.mjs +1 -0
  42. package/dist/esm/imageeditor/templates/imageeditor-adjustments.mjs +1 -1
  43. package/dist/esm/imageeditor/templates/imageeditor-blur-adaptive.mjs +1 -0
  44. package/dist/esm/imageeditor/templates/imageeditor-blur.mjs +1 -1
  45. package/dist/esm/imageeditor/templates/imageeditor-crop-adaptive.mjs +1 -0
  46. package/dist/esm/imageeditor/templates/imageeditor-crop.mjs +1 -1
  47. package/dist/esm/imageeditor/templates/imageeditor-filters-adaptive.mjs +1 -0
  48. package/dist/esm/imageeditor/templates/imageeditor-filters.mjs +1 -1
  49. package/dist/esm/imageeditor/templates/imageeditor-frames-adaptive.mjs +1 -0
  50. package/dist/esm/imageeditor/templates/imageeditor-frames.mjs +1 -1
  51. package/dist/esm/imageeditor/templates/imageeditor-insert-line-adaptive.mjs +1 -0
  52. package/dist/esm/imageeditor/templates/imageeditor-insert-line.mjs +1 -1
  53. package/dist/esm/imageeditor/templates/imageeditor-insert-shape-adaptive.mjs +1 -0
  54. package/dist/esm/imageeditor/templates/imageeditor-insert-shape.mjs +1 -1
  55. package/dist/esm/imageeditor/templates/imageeditor-insert-text-adaptive.mjs +1 -0
  56. package/dist/esm/imageeditor/templates/imageeditor-insert-text.mjs +1 -1
  57. package/dist/esm/imageeditor/templates/imageeditor-normal.mjs +1 -1
  58. package/dist/esm/imageeditor/templates/imageeditor-pixelate-adaptive.mjs +1 -0
  59. package/dist/esm/imageeditor/templates/imageeditor-pixelate.mjs +1 -1
  60. package/dist/esm/imageeditor/templates/imageeditor-resize-adaptive.mjs +1 -0
  61. package/dist/esm/imageeditor/templates/imageeditor-resize.mjs +1 -1
  62. package/dist/esm/imageeditor/templates/imageeditor-rotate-adaptive.mjs +1 -0
  63. package/dist/esm/imageeditor/templates/imageeditor-rotate.mjs +1 -1
  64. package/dist/esm/imageeditor/templates/imageeditor-shadow-adaptive.mjs +1 -0
  65. package/dist/esm/imageeditor/templates/imageeditor-shadow.mjs +1 -1
  66. package/dist/esm/index.mjs +8 -8
  67. package/dist/types/imageeditor/constants.d.ts +9 -0
  68. package/dist/types/imageeditor/imageeditor-canvas.spec.d.ts +15 -0
  69. package/dist/types/imageeditor/imageeditor-option-list.d.ts +1 -0
  70. package/dist/types/imageeditor/imageeditor-pane.d.ts +2 -0
  71. package/dist/types/imageeditor/imageeditor-preview-thumbnail.d.ts +1 -0
  72. package/dist/types/imageeditor/imageeditor-sidebar.d.ts +8 -0
  73. package/dist/types/imageeditor/imageeditor-toolbar.d.ts +5 -4
  74. package/dist/types/imageeditor/imageeditor.spec.d.ts +7 -3
  75. package/dist/types/imageeditor/index.d.ts +13 -1
  76. package/dist/types/imageeditor/templates/imageeditor-adjustments-adaptive.d.ts +1 -0
  77. package/dist/types/imageeditor/templates/imageeditor-adjustments.d.ts +1 -1
  78. package/dist/types/imageeditor/templates/imageeditor-blur-adaptive.d.ts +1 -0
  79. package/dist/types/imageeditor/templates/imageeditor-blur.d.ts +1 -1
  80. package/dist/types/imageeditor/templates/imageeditor-crop-adaptive.d.ts +1 -0
  81. package/dist/types/imageeditor/templates/imageeditor-crop.d.ts +1 -1
  82. package/dist/types/imageeditor/templates/imageeditor-filters-adaptive.d.ts +1 -0
  83. package/dist/types/imageeditor/templates/imageeditor-filters.d.ts +1 -6
  84. package/dist/types/imageeditor/templates/imageeditor-frames-adaptive.d.ts +1 -0
  85. package/dist/types/imageeditor/templates/imageeditor-frames.d.ts +1 -1
  86. package/dist/types/imageeditor/templates/imageeditor-insert-line-adaptive.d.ts +1 -0
  87. package/dist/types/imageeditor/templates/imageeditor-insert-line.d.ts +1 -1
  88. package/dist/types/imageeditor/templates/imageeditor-insert-shape-adaptive.d.ts +1 -0
  89. package/dist/types/imageeditor/templates/imageeditor-insert-shape.d.ts +1 -1
  90. package/dist/types/imageeditor/templates/imageeditor-insert-text-adaptive.d.ts +1 -0
  91. package/dist/types/imageeditor/templates/imageeditor-insert-text.d.ts +1 -1
  92. package/dist/types/imageeditor/templates/imageeditor-pixelate-adaptive.d.ts +1 -0
  93. package/dist/types/imageeditor/templates/imageeditor-pixelate.d.ts +1 -1
  94. package/dist/types/imageeditor/templates/imageeditor-resize-adaptive.d.ts +1 -0
  95. package/dist/types/imageeditor/templates/imageeditor-resize.d.ts +1 -1
  96. package/dist/types/imageeditor/templates/imageeditor-rotate-adaptive.d.ts +1 -0
  97. package/dist/types/imageeditor/templates/imageeditor-rotate.d.ts +1 -1
  98. package/dist/types/imageeditor/templates/imageeditor-shadow-adaptive.d.ts +1 -0
  99. package/dist/types/imageeditor/templates/imageeditor-shadow.d.ts +1 -1
  100. package/package.json +1 -1
  101. package/src/imageeditor/constants.ts +4 -0
  102. package/src/imageeditor/imageeditor-canvas.spec.tsx +30 -0
  103. package/src/imageeditor/imageeditor-option-list.tsx +2 -1
  104. package/src/imageeditor/imageeditor-pane.tsx +4 -1
  105. package/src/imageeditor/imageeditor-preview-thumbnail.tsx +3 -2
  106. package/src/imageeditor/imageeditor-sidebar.tsx +32 -19
  107. package/src/imageeditor/imageeditor-toolbar.tsx +27 -21
  108. package/src/imageeditor/imageeditor.spec.tsx +14 -6
  109. package/src/imageeditor/index.ts +13 -1
  110. package/src/imageeditor/templates/imageeditor-adjustments-adaptive.tsx +3 -0
  111. package/src/imageeditor/templates/imageeditor-adjustments.tsx +80 -57
  112. package/src/imageeditor/templates/imageeditor-blur-adaptive.tsx +3 -0
  113. package/src/imageeditor/templates/imageeditor-blur.tsx +9 -25
  114. package/src/imageeditor/templates/imageeditor-crop-adaptive.tsx +3 -0
  115. package/src/imageeditor/templates/imageeditor-crop.tsx +22 -28
  116. package/src/imageeditor/templates/imageeditor-filters-adaptive.tsx +3 -0
  117. package/src/imageeditor/templates/imageeditor-filters.tsx +32 -52
  118. package/src/imageeditor/templates/imageeditor-frames-adaptive.tsx +3 -0
  119. package/src/imageeditor/templates/imageeditor-frames.tsx +123 -149
  120. package/src/imageeditor/templates/imageeditor-insert-line-adaptive.tsx +3 -0
  121. package/src/imageeditor/templates/imageeditor-insert-line.tsx +24 -25
  122. package/src/imageeditor/templates/imageeditor-insert-shape-adaptive.tsx +3 -0
  123. package/src/imageeditor/templates/imageeditor-insert-shape.tsx +93 -50
  124. package/src/imageeditor/templates/imageeditor-insert-text-adaptive.tsx +3 -0
  125. package/src/imageeditor/templates/imageeditor-insert-text.tsx +24 -25
  126. package/src/imageeditor/templates/imageeditor-normal.tsx +2 -23
  127. package/src/imageeditor/templates/imageeditor-pixelate-adaptive.tsx +3 -0
  128. package/src/imageeditor/templates/imageeditor-pixelate.tsx +9 -24
  129. package/src/imageeditor/templates/imageeditor-resize-adaptive.tsx +3 -0
  130. package/src/imageeditor/templates/imageeditor-resize.tsx +10 -25
  131. package/src/imageeditor/templates/imageeditor-rotate-adaptive.tsx +3 -0
  132. package/src/imageeditor/templates/imageeditor-rotate.tsx +8 -23
  133. package/src/imageeditor/templates/imageeditor-shadow-adaptive.tsx +3 -0
  134. package/src/imageeditor/templates/imageeditor-shadow.tsx +20 -42
  135. package/src/imageeditor/tests/imageeditor-adaptive-panes.tsx +85 -0
  136. package/src/imageeditor/tests/imageeditor-adaptive-small.tsx +10 -305
  137. package/src/imageeditor/tests/imageeditor-adjustments-pane.tsx +2 -1
  138. package/src/imageeditor/tests/imageeditor-blur-pane.tsx +2 -1
  139. package/src/imageeditor/tests/imageeditor-crop-pane.tsx +2 -1
  140. package/src/imageeditor/tests/imageeditor-filters-pane.tsx +2 -1
  141. package/src/imageeditor/tests/imageeditor-frames-pane.tsx +4 -3
  142. package/src/imageeditor/tests/imageeditor-insert-shape-pane.tsx +1 -1
  143. package/src/imageeditor/tests/imageeditor-interactive-states.tsx +6 -6
  144. package/src/imageeditor/tests/imageeditor-pixelate-pane.tsx +2 -1
  145. package/src/imageeditor/tests/imageeditor-resize-pane.tsx +2 -1
  146. package/src/imageeditor/tests/imageeditor-responsive.tsx +4 -4
  147. package/src/imageeditor/tests/imageeditor-rotate-pane.tsx +2 -1
  148. package/src/imageeditor/tests/imageeditor-shadow-pane.tsx +2 -1
  149. package/dist/cjs/imageeditor/templates/imageeditor-disabled.js +0 -1
  150. package/dist/esm/imageeditor/templates/imageeditor-disabled.mjs +0 -1
  151. package/dist/types/imageeditor/templates/imageeditor-disabled.d.ts +0 -1
  152. package/src/imageeditor/templates/imageeditor-disabled.tsx +0 -54
@@ -1,5 +1,6 @@
1
- import { ImageEditor, ImageEditorPane } from "..";
1
+ import { ImageEditor, ImageEditorPane, ImageEditorCanvas } from "..";
2
2
  import { Button } from "../../button";
3
+ import { ToolbarSeparator } from "../../toolbar";
3
4
  import { ButtonGroup } from "../../button-group";
4
5
  import { Combobox } from "../../combobox";
5
6
  import { NumericTextbox } from "../../numerictextbox";
@@ -9,22 +10,6 @@ import { Icon } from "../../icon";
9
10
  import { InputSuffixText } from "../../input";
10
11
  import { Slider } from "../../slider";
11
12
 
12
- const insertTextSidebarItems = [
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" selected aria-label="Text"></Button>,
18
- <Button fillMode="flat" key="sidebar-button-5" icon="shapes" 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
13
  export const ImageEditorInsertText = ({
29
14
  selected = false,
30
15
  fontFamily = "Trebuchet MS",
@@ -32,28 +17,42 @@ export const ImageEditorInsertText = ({
32
17
  alignment = "center",
33
18
  fillColor = "#000000",
34
19
  opacity = 100,
20
+ adaptive,
21
+ imageSrc,
35
22
  ...props
36
23
  }: any) => (
37
24
  <ImageEditor
38
- sidebarItems={insertTextSidebarItems}
25
+ adaptive={adaptive}
26
+ activeTool="Text"
27
+ toolbarItems={adaptive && selected ? (
28
+ <>
29
+ <Button fillMode="flat" icon="squares-overlapping-plus" aria-label="Duplicate"></Button>
30
+ <Button fillMode="flat" icon="pencil" aria-label="Edit"></Button>
31
+ <ToolbarSeparator></ToolbarSeparator>
32
+ <Button fillMode="flat" icon="flip-horizontal" aria-label="Flip Horizontal"></Button>
33
+ <Button fillMode="flat" icon="flip-vertical" aria-label="Flip Vertical"></Button>
34
+ <ToolbarSeparator></ToolbarSeparator>
35
+ <Button fillMode="flat" icon="trash" aria-label="Delete"></Button>
36
+ </>
37
+ ) : undefined}
39
38
  actionPane={
40
- <ImageEditorPane title="Text" actions={
39
+ <ImageEditorPane title="Text" adaptive={adaptive} confirmDisabled={!selected} actions={
41
40
  <>
42
- <Button>Remove</Button>
43
- <Button themeColor="primary">Insert</Button>
41
+ <Button disabled={!selected}>Remove</Button>
42
+ <Button themeColor="primary" disabled={!selected}>Insert</Button>
44
43
  </>
45
44
  }>
46
45
  <Form tag="div">
47
46
  <FormField
48
47
  label="Font Family"
49
48
  editorId="text-font-family"
50
- editor={ <Combobox id="text-font-family" prefix={<Icon icon="font-family" />} value={fontFamily} /> }
49
+ editor={ <Combobox id="text-font-family" showClearButton={false} prefix={<Icon icon="font-family" />} value={fontFamily} /> }
51
50
  />
52
51
  <Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
53
52
  <FormField
54
53
  label="Font Size"
55
54
  editorId="text-font-size"
56
- editor={ <NumericTextbox id="text-font-size" showSpinButton={false} value={String(fontSize)} prefix={<Icon icon="font-size" />} /> }
55
+ editor={ <NumericTextbox id="text-font-size" showClearButton={false} showSpinButton={false} value={String(fontSize)} prefix={<Icon icon="font-size" />} /> }
57
56
  />
58
57
  <FormField
59
58
  label="Alignment"
@@ -86,7 +85,7 @@ export const ImageEditorInsertText = ({
86
85
  />
87
86
  <FormField
88
87
  label="Text Opacity"
89
- editor={ <NumericTextbox id="text-opacity" showSpinButton={false} value={`${opacity}%`} prefix={<Icon icon="transparency" />} aria-label="Text Opacity" /> }
88
+ editor={ <NumericTextbox id="text-opacity" showClearButton={false} showSpinButton={false} value={`${opacity}%`} prefix={<Icon icon="transparency" />} aria-label="Text Opacity" /> }
90
89
  />
91
90
  </Fieldset>
92
91
  <Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
@@ -163,7 +162,7 @@ export const ImageEditorInsertText = ({
163
162
  }
164
163
 
165
164
  children={
166
- <canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
165
+ <ImageEditorCanvas adaptive={adaptive} imageSrc={imageSrc} />
167
166
  }
168
167
  {...props} />
169
168
  );
@@ -1,36 +1,15 @@
1
1
  import { ImageEditor } from "..";
2
2
  import { ImageEditorPlaceholder } from "../imageeditor-placeholder";
3
- import { Button } from "../../button";
4
- import { Autocomplete } from "../../autocomplete";
5
- import { ToolbarItem, ToolbarSeparator } from "../../toolbar";
6
3
 
7
- // Freshly-loaded image: no edit history yet, so undo/redo are disabled
8
- const normalToolbarItems = [
9
- <Button fillMode="flat" key="toolbar-button-1" icon="image-add" aria-label="Image Add"></Button>,
10
- <ToolbarSeparator key="toolbar-separator-1"></ToolbarSeparator>,
11
- <Button fillMode="flat" key="toolbar-button-2" disabled icon="undo" aria-label="Undo"></Button>,
12
- <Button fillMode="flat" key="toolbar-button-3" disabled icon="redo" aria-label="Redo"></Button>,
13
- <ToolbarSeparator key="toolbar-separator-2"></ToolbarSeparator>,
14
- <Button fillMode="flat" key="toolbar-button-4" icon="download" aria-label="Download"></Button>,
15
- <div className="k-spacer" key="toolbar-spacer"></div>,
16
- <Button fillMode="flat" key="toolbar-button-5" icon="zoom-in" aria-label="Zoom In"></Button>,
17
- <ToolbarItem key="toolbar-item-1">
18
- <Autocomplete fillMode="flat" value="Fit" showClearButton={false} aria-label="Zoom options" />
19
- </ToolbarItem>,
20
- <Button fillMode="flat" key="toolbar-button-6" icon="zoom-out" aria-label="Zoom Out"></Button>
21
- ];
22
-
23
- // Without an image the editor shows the upload placeholder; passing children (the canvas) replaces it
24
4
  export const ImageEditorNormal = (props: any) => (
25
5
  <ImageEditor
26
- toolbarItems={normalToolbarItems}
27
- placeholder={props.children ? undefined : (
6
+ placeholder={
28
7
  <ImageEditorPlaceholder
29
8
  icon="image-add"
30
9
  title="Ready to create?"
31
10
  text="Upload a JPEG, PNG, or WebP file to unlock the full capabilities of ImageEditor."
32
11
  buttonText="Upload Image"
33
12
  />
34
- )}
13
+ }
35
14
  {...props} />
36
15
  );
@@ -0,0 +1,3 @@
1
+ import { ImageEditorPixelate } from "./imageeditor-pixelate";
2
+
3
+ export const ImageEditorPixelateAdaptive = (props: any) => <ImageEditorPixelate adaptive {...props} />;
@@ -1,4 +1,4 @@
1
- import { ImageEditor, ImageEditorPane } from "..";
1
+ import { ImageEditor, ImageEditorPane, ImageEditorCanvas } from "..";
2
2
  import { Button } from "../../button";
3
3
  import { NumericTextbox } from "../../numerictextbox";
4
4
  import { Form, FormField } from "../../form";
@@ -8,33 +8,18 @@ import { Slider } from "../../slider";
8
8
  import { InputSuffixText } from "../../input";
9
9
 
10
10
 
11
- const pixelateSidebarItems = [
12
- <Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
13
- <Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
14
- <Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
15
- <div className="k-separator" key="sidebar-separator-1"></div>,
16
- <Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
17
- <Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes"></Button>,
18
- <div className="k-separator" key="sidebar-separator-2"></div>,
19
- <Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" selected aria-label="Blur"></Button>,
20
- <Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
21
- <Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
22
- <div className="k-separator" key="sidebar-separator-3"></div>,
23
- <Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
24
- <Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
25
- ];
26
-
27
- export const ImageEditorPixelate = ({ selected = false, shape = "elliptical", intensity = 24, ...props }: any) => (
11
+ export const ImageEditorPixelate = ({ selected = false, shape = "elliptical", intensity = 0, adaptive, imageSrc, ...props }: any) => (
28
12
  <ImageEditor
29
- sidebarItems={pixelateSidebarItems}
13
+ adaptive={adaptive}
14
+ activeTool="Blur"
30
15
  actionPane={
31
- <ImageEditorPane title="Pixelate" actions={
16
+ <ImageEditorPane title="Pixelate" adaptive={adaptive} confirmDisabled={!selected} actions={
32
17
  <>
33
- <Button>Reset</Button>
34
- <Button themeColor="primary">Apply</Button>
18
+ <Button disabled={!selected}>Reset</Button>
19
+ <Button themeColor="primary" disabled={!selected}>Apply</Button>
35
20
  </>
36
21
  }>
37
- <SegmentedControl thumbStyles={{ width: "50%", left: "50%" }} stretched aria-label="Redaction Tool" style={{ flexShrink: 0 }}>
22
+ <SegmentedControl thumbStyles={{ width: "50%", left: "50%" }} stretched aria-label="Redaction Tool">
38
23
  <SegmentedControlButton icon="blur">Blur</SegmentedControlButton>
39
24
  <SegmentedControlButton icon="grid" selected>Pixelate</SegmentedControlButton>
40
25
  </SegmentedControl>
@@ -109,7 +94,7 @@ export const ImageEditorPixelate = ({ selected = false, shape = "elliptical", in
109
94
  }
110
95
 
111
96
  children={
112
- <canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
97
+ <ImageEditorCanvas adaptive={adaptive} imageSrc={imageSrc} />
113
98
  }
114
99
  {...props} />
115
100
  );
@@ -0,0 +1,3 @@
1
+ import { ImageEditorResize } from "./imageeditor-resize";
2
+
3
+ export const ImageEditorResizeAdaptive = (props: any) => <ImageEditorResize adaptive {...props} />;
@@ -1,4 +1,4 @@
1
- import { ImageEditor, ImageEditorPane, ImageEditorResizeHandles } from "..";
1
+ import { ImageEditor, ImageEditorPane, ImageEditorResizeHandles, ImageEditorCanvas } from "..";
2
2
  import { Button } from "../../button";
3
3
  import { CheckboxWithLabelAfter } from "../../checkbox";
4
4
  import { NumericTextbox } from "../../numerictextbox";
@@ -6,30 +6,15 @@ import { Form, FormField, Fieldset } from "../../form";
6
6
  import { Icon } from "../../icon";
7
7
  import { RadioGroup, RadioItem, RadioButtonWithLabelAfter } from "../../radio";
8
8
 
9
- const resizeSidebarItems = [
10
- <Button fillMode="flat" key="sidebar-button-1" icon="image-resize" selected aria-label="Resize"></Button>,
11
- <Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
12
- <Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
13
- <div className="k-separator" key="sidebar-separator-1"></div>,
14
- <Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
15
- <Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes"></Button>,
16
- <div className="k-separator" key="sidebar-separator-2"></div>,
17
- <Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
18
- <Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
19
- <Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
20
- <div className="k-separator" key="sidebar-separator-3"></div>,
21
- <Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
22
- <Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
23
- ];
24
-
25
- export const ImageEditorResize = ({ scaleUnit = "percentage", ...props }: any) => (
9
+ export const ImageEditorResize = ({ scaleUnit = "percentage", modified = false, adaptive, imageSrc, ...props }: any) => (
26
10
  <ImageEditor
27
- sidebarItems={resizeSidebarItems}
11
+ adaptive={adaptive}
12
+ activeTool="Resize"
28
13
  actionPane={
29
- <ImageEditorPane title="Resize" actions={
14
+ <ImageEditorPane title="Resize" adaptive={adaptive} confirmDisabled={!modified} actions={
30
15
  <>
31
- <Button>Reset</Button>
32
- <Button themeColor="primary">Apply</Button>
16
+ <Button disabled={!modified}>Reset</Button>
17
+ <Button themeColor="primary" disabled={!modified}>Apply</Button>
33
18
  </>
34
19
  }>
35
20
  <Form tag="div">
@@ -50,12 +35,12 @@ export const ImageEditorResize = ({ scaleUnit = "percentage", ...props }: any) =
50
35
  <FormField
51
36
  label="Width"
52
37
  editorId="resize-width"
53
- editor={ <NumericTextbox id="resize-width" showClearButton={false} value={scaleUnit === "percentage" ? "100%" : "494"} prefix={<Icon icon="arrows-left-right" />} /> }
38
+ editor={ <NumericTextbox id="resize-width" showClearButton={false} showSpinButton={false} value={scaleUnit === "percentage" ? "100%" : "494"} prefix={<Icon icon="arrows-left-right" />} /> }
54
39
  />
55
40
  <FormField
56
41
  label="Height"
57
42
  editorId="resize-height"
58
- editor={ <NumericTextbox id="resize-height" showClearButton={false} value={scaleUnit === "percentage" ? "100%" : "307"} prefix={<Icon icon="arrows-top-bottom" />} /> }
43
+ editor={ <NumericTextbox id="resize-height" showClearButton={false} showSpinButton={false} value={scaleUnit === "percentage" ? "100%" : "307"} prefix={<Icon icon="arrows-top-bottom" />} /> }
59
44
  />
60
45
  </Fieldset>
61
46
  <FormField editor={ <CheckboxWithLabelAfter id="resize-lock" checked>Lock Aspect Ratio</CheckboxWithLabelAfter> } />
@@ -65,7 +50,7 @@ export const ImageEditorResize = ({ scaleUnit = "percentage", ...props }: any) =
65
50
 
66
51
  children={
67
52
  <>
68
- <canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
53
+ <ImageEditorCanvas adaptive={adaptive} imageSrc={imageSrc} />
69
54
  <div className="k-imageeditor-resize">
70
55
  <ImageEditorResizeHandles variant="mixed" />
71
56
  </div>
@@ -0,0 +1,3 @@
1
+ import { ImageEditorRotate } from "./imageeditor-rotate";
2
+
3
+ export const ImageEditorRotateAdaptive = (props: any) => <ImageEditorRotate adaptive {...props} />;
@@ -1,34 +1,19 @@
1
- import { ImageEditor, ImageEditorPane, ImageEditorResizeHandles, ImageEditorRotateHandle } from "..";
1
+ import { ImageEditor, ImageEditorPane, ImageEditorResizeHandles, ImageEditorRotateHandle, ImageEditorCanvas } from "..";
2
2
  import { Button } from "../../button";
3
3
  import { NumericTextbox } from "../../numerictextbox";
4
4
  import { InputSuffixText } from "../../input";
5
5
  import { Form, FormField, Fieldset } from "../../form";
6
6
  import { Slider } from "../../slider";
7
7
 
8
- const rotateSidebarItems = [
9
- <Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
10
- <Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
11
- <Button fillMode="flat" key="sidebar-button-3" icon="rotate" selected aria-label="Rotate"></Button>,
12
- <div className="k-separator" key="sidebar-separator-1"></div>,
13
- <Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
14
- <Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes"></Button>,
15
- <div className="k-separator" key="sidebar-separator-2"></div>,
16
- <Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
17
- <Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
18
- <Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
19
- <div className="k-separator" key="sidebar-separator-3"></div>,
20
- <Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
21
- <Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow"></Button>
22
- ];
23
-
24
- export const ImageEditorRotate = ({ rotation = 0, ...props }: any) => (
8
+ export const ImageEditorRotate = ({ rotation = 0, adaptive, imageSrc, ...props }: any) => (
25
9
  <ImageEditor
26
- sidebarItems={rotateSidebarItems}
10
+ adaptive={adaptive}
11
+ activeTool="Rotate"
27
12
  actionPane={
28
- <ImageEditorPane title="Rotate" actions={
13
+ <ImageEditorPane title="Rotate" adaptive={adaptive} confirmDisabled={rotation === 0} actions={
29
14
  <>
30
- <Button>Reset</Button>
31
- <Button themeColor="primary">Apply</Button>
15
+ <Button disabled={rotation === 0}>Reset</Button>
16
+ <Button themeColor="primary" disabled={rotation === 0}>Apply</Button>
32
17
  </>
33
18
  }>
34
19
  <Form tag="div">
@@ -82,7 +67,7 @@ export const ImageEditorRotate = ({ rotation = 0, ...props }: any) => (
82
67
 
83
68
  children={
84
69
  <>
85
- <canvas width="494" height="307" role="img" aria-label="Image being edited" style={{ backgroundImage: "url('/packages/html/assets/sofia.jpg')", backgroundSize: "cover" }}></canvas>
70
+ <ImageEditorCanvas adaptive={adaptive} imageSrc={imageSrc} />
86
71
  <div className="k-imageeditor-rotate">
87
72
  <ImageEditorResizeHandles variant="scale" grid />
88
73
  <ImageEditorRotateHandle />
@@ -0,0 +1,3 @@
1
+ import { ImageEditorShadow } from "./imageeditor-shadow";
2
+
3
+ export const ImageEditorShadowAdaptive = (props: any) => <ImageEditorShadow adaptive {...props} />;
@@ -1,4 +1,4 @@
1
- import { ImageEditor, ImageEditorPane } from "..";
1
+ import { ImageEditor, ImageEditorPane, ImageEditorCanvas } from "..";
2
2
  import { Button } from "../../button";
3
3
  import { NumericTextbox } from "../../numerictextbox";
4
4
  import { ColorPicker } from "../../colorpicker";
@@ -6,46 +6,26 @@ import { Form, FormField, Fieldset } from "../../form";
6
6
  import { Icon } from "../../icon";
7
7
  import { InputPrefixText } from "../../input";
8
8
 
9
- const shadowSidebarItems = [
10
- <Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize"></Button>,
11
- <Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop"></Button>,
12
- <Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate"></Button>,
13
- <div className="k-separator" key="sidebar-separator-1"></div>,
14
- <Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text"></Button>,
15
- <Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes"></Button>,
16
- <div className="k-separator" key="sidebar-separator-2"></div>,
17
- <Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur"></Button>,
18
- <Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments"></Button>,
19
- <Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters"></Button>,
20
- <div className="k-separator" key="sidebar-separator-3"></div>,
21
- <Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame"></Button>,
22
- <Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" selected aria-label="Shadow"></Button>
23
- ];
24
-
25
- const hexToRgba = (hex: string, alphaPercent: number) => {
26
- const value = hex.replace("#", "");
27
- const r = parseInt(value.substring(0, 2), 16);
28
- const g = parseInt(value.substring(2, 4), 16);
29
- const b = parseInt(value.substring(4, 6), 16);
30
- return `rgba(${r}, ${g}, ${b}, ${alphaPercent / 100})`;
31
- };
32
-
33
9
  export const ImageEditorShadow = ({
34
10
  positionX = 0,
35
- positionY = -4,
36
- blur = 12,
11
+ positionY = 0,
12
+ blur = 0,
37
13
  spread = 0,
38
14
  color = "#000000",
39
- opacity = 20,
15
+ opacity = 100,
16
+ isPristine = positionX === 0 && positionY === 0 && blur === 0 && spread === 0 && color === "#000000" && opacity === 100,
17
+ adaptive,
18
+ imageSrc,
40
19
  ...props
41
20
  }: any) => (
42
21
  <ImageEditor
43
- sidebarItems={shadowSidebarItems}
22
+ adaptive={adaptive}
23
+ activeTool="Shadow"
44
24
  actionPane={
45
- <ImageEditorPane title="Shadow" actions={
25
+ <ImageEditorPane title="Shadow" adaptive={adaptive} confirmDisabled={isPristine} actions={
46
26
  <>
47
- <Button>Reset</Button>
48
- <Button themeColor="primary">Apply</Button>
27
+ <Button disabled={isPristine}>Reset</Button>
28
+ <Button themeColor="primary" disabled={isPristine}>Apply</Button>
49
29
  </>
50
30
  }>
51
31
  <Form tag="div">
@@ -53,8 +33,8 @@ export const ImageEditorShadow = ({
53
33
  label="Position"
54
34
  editor={
55
35
  <Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
56
- <NumericTextbox id="shadow-position-x" showSpinButton={false} value={String(positionX)} prefix={<InputPrefixText>X</InputPrefixText>} aria-label="Position X" />
57
- <NumericTextbox id="shadow-position-y" showSpinButton={false} value={String(positionY)} prefix={<InputPrefixText>Y</InputPrefixText>} aria-label="Position Y" />
36
+ <NumericTextbox id="shadow-position-x" showClearButton={false} showSpinButton={false} value={String(positionX)} prefix={<InputPrefixText>X</InputPrefixText>} aria-label="Position X" />
37
+ <NumericTextbox id="shadow-position-y" showClearButton={false} showSpinButton={false} value={String(positionY)} prefix={<InputPrefixText>Y</InputPrefixText>} aria-label="Position Y" />
58
38
  </Fieldset>
59
39
  }
60
40
  />
@@ -62,12 +42,12 @@ export const ImageEditorShadow = ({
62
42
  <FormField
63
43
  label="Blur"
64
44
  editorId="shadow-blur"
65
- editor={ <NumericTextbox id="shadow-blur" showSpinButton={false} value={String(blur)} prefix={<Icon icon="blur" />} /> }
45
+ editor={ <NumericTextbox id="shadow-blur" showClearButton={false} showSpinButton={false} value={String(blur)} prefix={<Icon icon="blur" />} /> }
66
46
  />
67
47
  <FormField
68
48
  label="Spread"
69
49
  editorId="shadow-spread"
70
- editor={ <NumericTextbox id="shadow-spread" showSpinButton={false} value={String(spread)} prefix={<Icon icon="brightness-contrast" />} /> }
50
+ editor={ <NumericTextbox id="shadow-spread" showClearButton={false} showSpinButton={false} value={String(spread)} prefix={<Icon icon="brightness-contrast" />} /> }
71
51
  />
72
52
  </Fieldset>
73
53
  <Fieldset layout="grid" cols={2} gutters={{ cols: "16px" }}>
@@ -78,7 +58,7 @@ export const ImageEditorShadow = ({
78
58
  <FormField
79
59
  label="Opacity"
80
60
  editorId="shadow-opacity"
81
- editor={ <NumericTextbox id="shadow-opacity" showSpinButton={false} value={`${opacity}%`} prefix={<Icon icon="transparency" />} /> }
61
+ editor={ <NumericTextbox id="shadow-opacity" showClearButton={false} showSpinButton={false} value={`${opacity}%`} prefix={<Icon icon="transparency" />} /> }
82
62
  />
83
63
  </Fieldset>
84
64
  </Form>
@@ -86,11 +66,9 @@ export const ImageEditorShadow = ({
86
66
  }
87
67
 
88
68
  children={
89
- <canvas width="494" height="307" role="img" aria-label="Image being edited" style={{
90
- backgroundImage: "url('/packages/html/assets/sofia.jpg')",
91
- backgroundSize: "cover",
92
- boxShadow: `${positionX}px ${positionY}px ${blur}px ${spread}px ${hexToRgba(color, opacity)}`
93
- }}></canvas>
69
+ <ImageEditorCanvas adaptive={adaptive} imageSrc={imageSrc} style={{
70
+ boxShadow: `${positionX}px ${positionY}px ${blur}px ${spread}px color-mix(in srgb, ${color} ${opacity}%, transparent)`
71
+ }} />
94
72
  }
95
73
  {...props} />
96
74
  );
@@ -0,0 +1,85 @@
1
+ import {
2
+ ImageEditorResizeAdaptive,
3
+ ImageEditorCropAdaptive,
4
+ ImageEditorRotateAdaptive,
5
+ ImageEditorInsertTextAdaptive,
6
+ ImageEditorInsertShapeAdaptive,
7
+ ImageEditorInsertLineAdaptive,
8
+ ImageEditorBlurAdaptive,
9
+ ImageEditorPixelateAdaptive,
10
+ ImageEditorAdjustmentsAdaptive,
11
+ ImageEditorFiltersAdaptive,
12
+ ImageEditorFramesAdaptive,
13
+ ImageEditorShadowAdaptive
14
+ } from '..';
15
+ import { IMAGEEDITOR_TEST_IMAGE_SRC } from '../constants';
16
+
17
+ const styles = `
18
+ #test-area {
19
+ display: flex;
20
+ gap: 24px;
21
+ flex-wrap: wrap;
22
+ }
23
+ #test-area .k-imageeditor-adaptive {
24
+ width: 360px;
25
+ height: 800px;
26
+ }
27
+ `;
28
+
29
+ const image = { imageSrc: IMAGEEDITOR_TEST_IMAGE_SRC };
30
+
31
+ export default () => (
32
+ <>
33
+ <style>{styles}</style>
34
+ <div id="test-area">
35
+ <div>
36
+ <h4>Mobile / Resize</h4>
37
+ <ImageEditorResizeAdaptive {...image} />
38
+ </div>
39
+ <div>
40
+ <h4>Mobile / Crop</h4>
41
+ <ImageEditorCropAdaptive {...image} />
42
+ </div>
43
+ <div>
44
+ <h4>Mobile / Rotate</h4>
45
+ <ImageEditorRotateAdaptive {...image} />
46
+ </div>
47
+ <div>
48
+ <h4>Mobile / Text</h4>
49
+ <ImageEditorInsertTextAdaptive {...image} />
50
+ </div>
51
+ <div>
52
+ <h4>Mobile / Shape</h4>
53
+ <ImageEditorInsertShapeAdaptive {...image} />
54
+ </div>
55
+ <div>
56
+ <h4>Mobile / Line</h4>
57
+ <ImageEditorInsertLineAdaptive {...image} />
58
+ </div>
59
+ <div>
60
+ <h4>Mobile / Blur</h4>
61
+ <ImageEditorBlurAdaptive {...image} />
62
+ </div>
63
+ <div>
64
+ <h4>Mobile / Pixelate</h4>
65
+ <ImageEditorPixelateAdaptive {...image} />
66
+ </div>
67
+ <div>
68
+ <h4>Mobile / Adjustments</h4>
69
+ <ImageEditorAdjustmentsAdaptive {...image} />
70
+ </div>
71
+ <div>
72
+ <h4>Mobile / Filters</h4>
73
+ <ImageEditorFiltersAdaptive {...image} />
74
+ </div>
75
+ <div>
76
+ <h4>Mobile / Frame</h4>
77
+ <ImageEditorFramesAdaptive {...image} />
78
+ </div>
79
+ <div>
80
+ <h4>Mobile / Shadow</h4>
81
+ <ImageEditorShadowAdaptive {...image} />
82
+ </div>
83
+ </div>
84
+ </>
85
+ );