@progress/kendo-themes-html 14.7.0-dev.13 → 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 (154) 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/src/list/tests/list-states.tsx +57 -0
  150. package/src/menu/tests/menu-states.tsx +13 -0
  151. package/dist/cjs/imageeditor/templates/imageeditor-disabled.js +0 -1
  152. package/dist/esm/imageeditor/templates/imageeditor-disabled.mjs +0 -1
  153. package/dist/types/imageeditor/templates/imageeditor-disabled.d.ts +0 -1
  154. package/src/imageeditor/templates/imageeditor-disabled.tsx +0 -54
@@ -1,2 +1,11 @@
1
1
  export declare const IMAGEEDITOR_MODULE_NAME = "image-editor";
2
2
  export declare const IMAGEEDITOR_FOLDER_NAME = "imageeditor";
3
+ export declare const IMAGEEDITOR_CANVAS_SIZE: {
4
+ width: number;
5
+ height: number;
6
+ };
7
+ export declare const IMAGEEDITOR_ADAPTIVE_CANVAS_SIZE: {
8
+ width: number;
9
+ height: number;
10
+ };
11
+ export declare const IMAGEEDITOR_TEST_IMAGE_SRC = "/packages/html/assets/sofia.jpg";
@@ -0,0 +1,15 @@
1
+ export type ImageEditorCanvasProps = React.CanvasHTMLAttributes<HTMLCanvasElement> & {
2
+ imageSrc?: string;
3
+ /** Uses the smaller mobile canvas size. */
4
+ adaptive?: boolean;
5
+ };
6
+ /**
7
+ * @aria {role="img"} Indicates the canvas role as an image.
8
+ * @aria {aria-label|aria-labelledby} Provides an accessible name for the canvas by describing the image content.
9
+ */
10
+ export declare const ImageEditorCanvas: {
11
+ (props: ImageEditorCanvasProps): import("react/jsx-runtime").JSX.Element;
12
+ moduleName: null;
13
+ folderName: null;
14
+ };
15
+ export default ImageEditorCanvas;
@@ -10,6 +10,7 @@ export declare const ImageEditorOptionList: {
10
10
  folderName: null;
11
11
  defaultOptions: {
12
12
  scrollable: boolean;
13
+ scrollingPosition: "start";
13
14
  };
14
15
  };
15
16
  export default ImageEditorOptionList;
@@ -5,6 +5,8 @@ export type KendoImageEditorPaneProps = {
5
5
  actions?: React.JSX.Element | React.JSX.Element[];
6
6
  /** Renders the mobile bottom-sheet header (Close/Title/Confirm) and omits the `actions` footer. */
7
7
  adaptive?: boolean;
8
+ /** Disables the adaptive Confirm button (nothing to apply yet). */
9
+ confirmDisabled?: boolean;
8
10
  };
9
11
  export type KendoImageEditorPaneState = {
10
12
  [K in (typeof states)[number]]?: boolean;
@@ -1,4 +1,5 @@
1
1
  export type ImageEditorPreviewThumbnailProps = {
2
+ imageSrc?: string;
2
3
  label?: string;
3
4
  style?: React.CSSProperties;
4
5
  children?: React.ReactNode;
@@ -1,6 +1,14 @@
1
1
  export declare const IMAGEEDITORSIDEBAR_CLASSNAME = "k-imageeditor-sidebar";
2
+ export type ImageEditorSidebarTool = 'Resize' | 'Crop' | 'Rotate' | 'Text' | 'Shapes' | 'Blur' | 'Adjustments' | 'Filters' | 'Frame' | 'Shadow';
2
3
  export type KendoImageEditorSidebarProps = {
4
+ /** Replaces the default tool buttons. */
3
5
  sidebarItems?: React.JSX.Element | React.JSX.Element[];
6
+ /** The tool whose pane is open; its button is pressed. */
7
+ activeTool?: ImageEditorSidebarTool;
8
+ /** Disables the tool buttons (no image loaded). */
9
+ disabled?: boolean;
10
+ /** Lays the rail out horizontally, so separators are vertical. */
11
+ adaptive?: boolean;
4
12
  scrollable?: boolean;
5
13
  scrollingPosition?: 'start' | 'end' | 'both';
6
14
  };
@@ -2,15 +2,16 @@ import { KendoToolbarProps } from '../toolbar';
2
2
  export declare const IMAGEEDITORTOOLBAR_CLASSNAME = "k-imageeditor-toolbar";
3
3
  export type KendoImageEditorToolbarProps = {
4
4
  toolbarItems?: React.JSX.Element | React.JSX.Element[];
5
+ /** Omits the zoom-level combobox. */
6
+ adaptive?: boolean;
7
+ /** Disables the image-dependent actions (no image loaded). */
8
+ disabled?: boolean;
5
9
  };
6
- export declare const imageEditorToolbarItems: import("react/jsx-runtime").JSX.Element[];
7
10
  export declare const ImageEditorToolbar: {
8
11
  (props: KendoToolbarProps & KendoImageEditorToolbarProps & React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
9
12
  states: any[];
10
13
  options: {};
11
14
  className: string;
12
- defaultOptions: {
13
- toolbarItems: import("react/jsx-runtime").JSX.Element[];
14
- };
15
+ defaultOptions: {};
15
16
  };
16
17
  export default ImageEditorToolbar;
@@ -1,9 +1,13 @@
1
+ import { ImageEditorSidebarTool } from './imageeditor-sidebar';
1
2
  import { KendoComponent } from '../_types/component';
2
3
  export declare const IMAGEEDITOR_CLASSNAME = "k-imageeditor";
3
4
  export type KendoImageEditorProps = {
4
5
  toolbarItems?: React.JSX.Element | React.JSX.Element[];
5
6
  actionPane?: React.JSX.Element | React.JSX.Element[];
6
7
  sidebarItems?: React.JSX.Element | React.JSX.Element[];
8
+ /** The tool whose pane is open; its sidebar button is pressed. */
9
+ activeTool?: ImageEditorSidebarTool;
10
+ /** Shown instead of the canvas while no image is loaded; the toolbar actions and sidebar tools are disabled. */
7
11
  placeholder?: React.JSX.Element;
8
12
  contentHeight?: string;
9
13
  exporting?: boolean;
@@ -13,8 +17,8 @@ export type KendoImageEditorProps = {
13
17
  sidebarScrollingPosition?: 'start' | 'end' | 'both';
14
18
  };
15
19
  /**
16
- * @aria {role="img"} Indicates the canvas role as an image. Applicable when an image is loaded.
17
- * @aria {aria-label|aria-labelledby} Provides an accessible name for the canvas by describing the image content. Applicable when an image is loaded.
20
+ * @aria {role="application"} Indicates that the ImageEditor has its own keyboard navigation implemented.
21
+ * @aria {aria-label} Provides an accessible name for the application.
18
22
  * @aria {role="status"} Announces the busy overlay shown while `exporting` is true.
19
23
  * @ux {Canvas} Renders the image on an editable canvas.
20
24
  * @ux {Crop} A crop tool lets the user select and apply a cropping region.
@@ -25,7 +29,7 @@ export type KendoImageEditorProps = {
25
29
  */
26
30
  export declare const ImageEditor: KendoComponent<KendoImageEditorProps & React.HTMLAttributes<HTMLDivElement>>;
27
31
  /**
28
- * @keyboard {Alt/Opt(Mac) + Number} Focuses the component.
32
+ * @keyboard {Alt/Opt(Mac) + W} Focuses the first focusable element in the Image Editor Toolbar.
29
33
  * @keyboard {Tab} Focuses the next focusable item.
30
34
  * @keyboard {Shift + Tab} Focuses the previous focusable item.
31
35
  * @keyboard {Enter} Presses the focused button.
@@ -6,13 +6,13 @@ export * from './imageeditor-pane';
6
6
  export * from './imageeditor-option-preview';
7
7
  export * from './imageeditor-option-list';
8
8
  export * from './imageeditor-preview-thumbnail';
9
+ export * from './imageeditor-canvas.spec';
9
10
  export * from './imageeditor-resize-handles';
10
11
  export * from './imageeditor-rotate-handle';
11
12
  export * from './templates/imageeditor-normal';
12
13
  export * from './templates/imageeditor-resize';
13
14
  export * from './templates/imageeditor-rotate';
14
15
  export * from './templates/imageeditor-crop';
15
- export * from './templates/imageeditor-disabled';
16
16
  export * from './templates/imageeditor-insert-text';
17
17
  export * from './templates/imageeditor-insert-shape';
18
18
  export * from './templates/imageeditor-insert-line';
@@ -22,3 +22,15 @@ export * from './templates/imageeditor-filters';
22
22
  export * from './templates/imageeditor-adjustments';
23
23
  export * from './templates/imageeditor-frames';
24
24
  export * from './templates/imageeditor-shadow';
25
+ export * from './templates/imageeditor-resize-adaptive';
26
+ export * from './templates/imageeditor-crop-adaptive';
27
+ export * from './templates/imageeditor-rotate-adaptive';
28
+ export * from './templates/imageeditor-insert-text-adaptive';
29
+ export * from './templates/imageeditor-insert-shape-adaptive';
30
+ export * from './templates/imageeditor-insert-line-adaptive';
31
+ export * from './templates/imageeditor-blur-adaptive';
32
+ export * from './templates/imageeditor-pixelate-adaptive';
33
+ export * from './templates/imageeditor-adjustments-adaptive';
34
+ export * from './templates/imageeditor-filters-adaptive';
35
+ export * from './templates/imageeditor-frames-adaptive';
36
+ export * from './templates/imageeditor-shadow-adaptive';
@@ -0,0 +1 @@
1
+ export declare const ImageEditorAdjustmentsAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorAdjustments: ({ brightness, contrast, saturation, hue, exposure, blur, opacity, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorAdjustments: ({ brightness, contrast, saturation, hue, exposure, blur, opacity, isPristine, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorBlurAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorBlur: ({ selected, shape, intensity, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorBlur: ({ selected, shape, intensity, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorCropAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorCrop: ({ cropWidth, cropHeight, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorCrop: ({ cropWidth, cropHeight, isPristine, adaptive, canvas, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorFiltersAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1 @@
1
- export declare const filterPresets: {
2
- [key: string]: {
3
- label: string;
4
- };
5
- };
6
- export declare const ImageEditorFilters: ({ preset, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorFilters: ({ preset, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorFramesAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorFrames: ({ style, imageRoundness, framesAmount, frameThickness, frameRoundness, offset, strokeColor, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorFrames: ({ style, imageRoundness, isPristine, framesAmount, frameThickness, frameRoundness, offset, strokeColor, adaptive, canvas, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorInsertLineAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- export declare const ImageEditorInsertLine: ({ selected, strokeColor, strokeWidth, strokeType, startPoint, endPoint, opacity, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorInsertLine: ({ selected, strokeColor, strokeWidth, strokeType, startPoint, endPoint, opacity, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
2
2
  export default ImageEditorInsertLine;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorInsertShapeAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- export declare const ImageEditorInsertShape: ({ selected, shapeType, strokeColor, strokeWidth, fillColor, textColor, fontFamily, fontSize, alignment, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorInsertShape: ({ selected, shapeType, strokeColor, strokeWidth, fillColor, textColor, fontFamily, fontSize, alignment, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
2
2
  export default ImageEditorInsertShape;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorInsertTextAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- export declare const ImageEditorInsertText: ({ selected, fontFamily, fontSize, alignment, fillColor, opacity, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorInsertText: ({ selected, fontFamily, fontSize, alignment, fillColor, opacity, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
2
2
  export default ImageEditorInsertText;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorPixelateAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorPixelate: ({ selected, shape, intensity, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorPixelate: ({ selected, shape, intensity, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorResizeAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorResize: ({ scaleUnit, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorResize: ({ scaleUnit, modified, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorRotateAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorRotate: ({ rotation, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorRotate: ({ rotation, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const ImageEditorShadowAdaptive: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- export declare const ImageEditorShadow: ({ positionX, positionY, blur, spread, color, opacity, ...props }: any) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ImageEditorShadow: ({ positionX, positionY, blur, spread, color, opacity, isPristine, adaptive, imageSrc, ...props }: any) => import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@progress/kendo-themes-html",
3
3
  "description": "A collection of HTML helpers used for developing Kendo UI themes",
4
- "version": "14.7.0-dev.13",
4
+ "version": "14.7.0-dev.15",
5
5
  "author": "Progress",
6
6
  "license": "Apache-2.0",
7
7
  "keywords": [
@@ -1,2 +1,6 @@
1
1
  export const IMAGEEDITOR_MODULE_NAME = 'image-editor';
2
2
  export const IMAGEEDITOR_FOLDER_NAME = 'imageeditor';
3
+ export const IMAGEEDITOR_CANVAS_SIZE = { width: 494, height: 307 };
4
+ export const IMAGEEDITOR_ADAPTIVE_CANVAS_SIZE = { width: 326, height: 203 };
5
+ // Image used by the visual tests; components render no image unless `imageSrc` is passed.
6
+ export const IMAGEEDITOR_TEST_IMAGE_SRC = '/packages/html/assets/sofia.jpg';
@@ -0,0 +1,30 @@
1
+ import { IMAGEEDITOR_ADAPTIVE_CANVAS_SIZE, IMAGEEDITOR_CANVAS_SIZE } from './constants';
2
+
3
+ export type ImageEditorCanvasProps = React.CanvasHTMLAttributes<HTMLCanvasElement> & {
4
+ imageSrc?: string;
5
+ /** Uses the smaller mobile canvas size. */
6
+ adaptive?: boolean;
7
+ };
8
+
9
+ /**
10
+ * @aria {role="img"} Indicates the canvas role as an image.
11
+ * @aria {aria-label|aria-labelledby} Provides an accessible name for the canvas by describing the image content.
12
+ */
13
+ export const ImageEditorCanvas = (props: ImageEditorCanvasProps) => {
14
+ const { imageSrc, adaptive, style, ...other } = props;
15
+
16
+ return (
17
+ <canvas
18
+ role="img"
19
+ aria-label="Image being edited"
20
+ {...(adaptive ? IMAGEEDITOR_ADAPTIVE_CANVAS_SIZE : IMAGEEDITOR_CANVAS_SIZE)}
21
+ {...other}
22
+ style={{ ...(imageSrc && { backgroundImage: `url('${imageSrc}')` }), backgroundSize: "cover", ...style }}
23
+ ></canvas>
24
+ );
25
+ };
26
+
27
+ ImageEditorCanvas.moduleName = null;
28
+ ImageEditorCanvas.folderName = null;
29
+
30
+ export default ImageEditorCanvas;
@@ -9,6 +9,7 @@ export type KendoImageEditorOptionListProps = {
9
9
 
10
10
  const defaultOptions = {
11
11
  scrollable: false,
12
+ scrollingPosition: 'start' as const,
12
13
  };
13
14
 
14
15
  export const ImageEditorOptionList = (
@@ -16,7 +17,7 @@ export const ImageEditorOptionList = (
16
17
  ) => {
17
18
  const {
18
19
  scrollable = defaultOptions.scrollable,
19
- scrollingPosition,
20
+ scrollingPosition = defaultOptions.scrollingPosition,
20
21
  children,
21
22
  ...other
22
23
  } = props;
@@ -13,6 +13,8 @@ export type KendoImageEditorPaneProps = {
13
13
  actions?: React.JSX.Element | React.JSX.Element[];
14
14
  /** Renders the mobile bottom-sheet header (Close/Title/Confirm) and omits the `actions` footer. */
15
15
  adaptive?: boolean;
16
+ /** Disables the adaptive Confirm button (nothing to apply yet). */
17
+ confirmDisabled?: boolean;
16
18
  };
17
19
 
18
20
  const defaultOptions = {};
@@ -26,6 +28,7 @@ export const ImageEditorPane = (
26
28
  title,
27
29
  actions,
28
30
  adaptive,
31
+ confirmDisabled,
29
32
  children,
30
33
  ...other
31
34
  } = props;
@@ -42,7 +45,7 @@ export const ImageEditorPane = (
42
45
  {adaptive && <Button fillMode="flat" icon="x" aria-label="Close" title="Close"></Button>}
43
46
  <div className="k-imageeditor-pane-title">{title}</div>
44
47
  {adaptive
45
- ? <Button fillMode="flat" icon="check" aria-label="Confirm" title="Confirm"></Button>
48
+ ? <Button fillMode="flat" icon="check" disabled={confirmDisabled} aria-label="Confirm" title="Confirm"></Button>
46
49
  : <Button fillMode="flat" icon="x" aria-label="Close" title="Close"></Button>
47
50
  }
48
51
  </div>
@@ -1,4 +1,5 @@
1
1
  export type ImageEditorPreviewThumbnailProps = {
2
+ imageSrc?: string;
2
3
  label?: string;
3
4
  style?: React.CSSProperties;
4
5
  children?: React.ReactNode;
@@ -9,7 +10,7 @@ const defaultOptions = {};
9
10
  // Generic thumbnail + caption pair used inside preview cards (aspect ratio, filters, frame style, ...);
10
11
  // not tied to any particular preview card component so it can be reused wherever a small image preview is needed.
11
12
  export const ImageEditorPreviewThumbnail = (props: ImageEditorPreviewThumbnailProps) => {
12
- const { label, style, children } = props;
13
+ const { label, style, children, imageSrc } = props;
13
14
 
14
15
  return (
15
16
  <>
@@ -21,7 +22,7 @@ export const ImageEditorPreviewThumbnail = (props: ImageEditorPreviewThumbnailPr
21
22
  width: "100%",
22
23
  height: "40px",
23
24
  borderRadius: "2px",
24
- backgroundImage: "url('/packages/html/assets/sofia.jpg')",
25
+ backgroundImage: imageSrc ? `url('${imageSrc}')` : undefined,
25
26
  backgroundSize: "cover",
26
27
  boxSizing: "border-box",
27
28
  ...style
@@ -3,30 +3,22 @@ import { Button } from '../button/button.spec';
3
3
 
4
4
  export const IMAGEEDITORSIDEBAR_CLASSNAME = `k-imageeditor-sidebar`;
5
5
 
6
+ export type ImageEditorSidebarTool = 'Resize' | 'Crop' | 'Rotate' | 'Text' | 'Shapes' | 'Blur' | 'Adjustments' | 'Filters' | 'Frame' | 'Shadow';
7
+
6
8
  export type KendoImageEditorSidebarProps = {
9
+ /** Replaces the default tool buttons. */
7
10
  sidebarItems?: React.JSX.Element | React.JSX.Element[];
11
+ /** The tool whose pane is open; its button is pressed. */
12
+ activeTool?: ImageEditorSidebarTool;
13
+ /** Disables the tool buttons (no image loaded). */
14
+ disabled?: boolean;
15
+ /** Lays the rail out horizontally, so separators are vertical. */
16
+ adaptive?: boolean;
8
17
  scrollable?: boolean;
9
18
  scrollingPosition?: 'start' | 'end' | 'both';
10
19
  };
11
20
 
12
- const defaultSidebarItems = [
13
- <Button fillMode="flat" key="sidebar-button-1" icon="image-resize" aria-label="Resize" />,
14
- <Button fillMode="flat" key="sidebar-button-2" icon="crop" aria-label="Crop" />,
15
- <Button fillMode="flat" key="sidebar-button-3" icon="rotate" aria-label="Rotate" />,
16
- <div className="k-separator" key="sidebar-separator-1" />,
17
- <Button fillMode="flat" key="sidebar-button-4" icon="free-text" aria-label="Text" />,
18
- <Button fillMode="flat" key="sidebar-button-5" icon="shapes" aria-label="Shapes" />,
19
- <div className="k-separator" key="sidebar-separator-2" />,
20
- <Button fillMode="flat" key="sidebar-button-6" icon="drop-half-pixelated" aria-label="Blur" />,
21
- <Button fillMode="flat" key="sidebar-button-7" icon="sliders-horizontal" aria-label="Adjustments" />,
22
- <Button fillMode="flat" key="sidebar-button-8" icon="circles-three-intersecting" aria-label="Filters" />,
23
- <div className="k-separator" key="sidebar-separator-3" />,
24
- <Button fillMode="flat" key="sidebar-button-9" icon="frame-corners" aria-label="Frame" />,
25
- <Button fillMode="flat" key="sidebar-button-10" icon="circle-half-tilted" aria-label="Shadow" />
26
- ];
27
-
28
21
  const defaultOptions = {
29
- sidebarItems: defaultSidebarItems,
30
22
  scrollable: false,
31
23
  };
32
24
 
@@ -39,12 +31,17 @@ export const ImageEditorSidebar = (
39
31
  React.HTMLAttributes<HTMLDivElement>
40
32
  ) => {
41
33
  const {
42
- sidebarItems = defaultOptions.sidebarItems,
34
+ sidebarItems,
35
+ activeTool,
36
+ disabled,
37
+ adaptive,
43
38
  scrollable = defaultOptions.scrollable,
44
39
  scrollingPosition,
45
40
  ...other
46
41
  } = props;
47
42
 
43
+ const separatorClassName = adaptive ? 'k-separator k-separator-vertical' : 'k-separator';
44
+
48
45
  return (
49
46
  <div
50
47
  {...other}
@@ -58,7 +55,23 @@ export const ImageEditorSidebar = (
58
55
  )}
59
56
  >
60
57
  <div className="k-imageeditor-sidebar-items" role="toolbar" aria-label="Tools">
61
- {sidebarItems ?? props.children}
58
+ {sidebarItems ?? (
59
+ <>
60
+ <Button fillMode="flat" togglable icon="image-resize" aria-label="Resize" selected={activeTool === 'Resize'} disabled={disabled}></Button>
61
+ <Button fillMode="flat" togglable icon="crop" aria-label="Crop" selected={activeTool === 'Crop'} disabled={disabled}></Button>
62
+ <Button fillMode="flat" togglable icon="rotate" aria-label="Rotate" selected={activeTool === 'Rotate'} disabled={disabled}></Button>
63
+ <div className={separatorClassName}></div>
64
+ <Button fillMode="flat" togglable icon="free-text" aria-label="Text" selected={activeTool === 'Text'} disabled={disabled}></Button>
65
+ <Button fillMode="flat" togglable icon="shapes" aria-label="Shapes" selected={activeTool === 'Shapes'} disabled={disabled}></Button>
66
+ <div className={separatorClassName}></div>
67
+ <Button fillMode="flat" togglable icon="drop-half-pixelated" aria-label="Blur" selected={activeTool === 'Blur'} disabled={disabled}></Button>
68
+ <Button fillMode="flat" togglable icon="sliders-horizontal" aria-label="Adjustments" selected={activeTool === 'Adjustments'} disabled={disabled}></Button>
69
+ <Button fillMode="flat" togglable icon="circles-three-intersecting" aria-label="Filters" selected={activeTool === 'Filters'} disabled={disabled}></Button>
70
+ <div className={separatorClassName}></div>
71
+ <Button fillMode="flat" togglable icon="frame-corners" aria-label="Frame" selected={activeTool === 'Frame'} disabled={disabled}></Button>
72
+ <Button fillMode="flat" togglable icon="circle-half-tilted" aria-label="Shadow" selected={activeTool === 'Shadow'} disabled={disabled}></Button>
73
+ </>
74
+ )}
62
75
  </div>
63
76
  </div>
64
77
  );
@@ -11,27 +11,13 @@ const options = {};
11
11
 
12
12
  export type KendoImageEditorToolbarProps = {
13
13
  toolbarItems?: React.JSX.Element | React.JSX.Element[];
14
+ /** Omits the zoom-level combobox. */
15
+ adaptive?: boolean;
16
+ /** Disables the image-dependent actions (no image loaded). */
17
+ disabled?: boolean;
14
18
  };
15
19
 
16
- // Shared toolbar preset for tool templates that have an active image/history (undo, redo and zoom enabled)
17
- export const imageEditorToolbarItems = [
18
- <Button fillMode="flat" key="toolbar-button-1" icon="image-add" aria-label="Image Add"></Button>,
19
- <ToolbarSeparator key="toolbar-separator-1"></ToolbarSeparator>,
20
- <Button fillMode="flat" key="toolbar-button-2" icon="undo" aria-label="Undo"></Button>,
21
- <Button fillMode="flat" key="toolbar-button-3" icon="redo" aria-label="Redo"></Button>,
22
- <ToolbarSeparator key="toolbar-separator-2"></ToolbarSeparator>,
23
- <Button fillMode="flat" key="toolbar-button-4" icon="download" aria-label="Download"></Button>,
24
- <div className="k-spacer" key="toolbar-spacer"></div>,
25
- <Button fillMode="flat" key="toolbar-button-5" icon="zoom-in" aria-label="Zoom In"></Button>,
26
- <ToolbarItem key="toolbar-item-1">
27
- <Autocomplete fillMode="flat" value="Fit" showClearButton={false} aria-label="Zoom options" />
28
- </ToolbarItem>,
29
- <Button fillMode="flat" key="toolbar-button-6" icon="zoom-out" aria-label="Zoom Out"></Button>
30
- ];
31
-
32
- const defaultOptions = {
33
- toolbarItems: imageEditorToolbarItems
34
- };
20
+ const defaultOptions = {};
35
21
 
36
22
  export const ImageEditorToolbar = (
37
23
  props: KendoToolbarProps &
@@ -39,7 +25,9 @@ export const ImageEditorToolbar = (
39
25
  React.HTMLAttributes<HTMLDivElement>
40
26
  ) => {
41
27
  const {
42
- toolbarItems = defaultOptions.toolbarItems,
28
+ toolbarItems,
29
+ adaptive,
30
+ disabled,
43
31
  ...other
44
32
  } = props;
45
33
 
@@ -52,7 +40,25 @@ export const ImageEditorToolbar = (
52
40
  )}
53
41
  fillMode="flat"
54
42
  >
55
- {toolbarItems}
43
+ {toolbarItems ?? (
44
+ // A freshly-loaded image has no edit history, so undo and redo are always disabled
45
+ <>
46
+ <Button fillMode="flat" icon="image-add" aria-label="Image Add"></Button>
47
+ <ToolbarSeparator></ToolbarSeparator>
48
+ <Button fillMode="flat" disabled icon="undo" aria-label="Undo"></Button>
49
+ <Button fillMode="flat" disabled icon="redo" aria-label="Redo"></Button>
50
+ <ToolbarSeparator></ToolbarSeparator>
51
+ <Button fillMode="flat" disabled={disabled} icon="download" aria-label="Download"></Button>
52
+ <div className="k-spacer"></div>
53
+ <Button fillMode="flat" disabled={disabled} icon="zoom-in" aria-label="Zoom In"></Button>
54
+ {!adaptive &&
55
+ <ToolbarItem>
56
+ <Autocomplete fillMode="flat" disabled={disabled} value="Fit" showClearButton={false} aria-label="Zoom options" />
57
+ </ToolbarItem>
58
+ }
59
+ <Button fillMode="flat" disabled={disabled} icon="zoom-out" aria-label="Zoom Out"></Button>
60
+ </>
61
+ )}
56
62
  </Toolbar>
57
63
  );
58
64
  };
@@ -1,6 +1,6 @@
1
1
  import { classNames } from '../misc';
2
2
  import { ImageEditorToolbar } from './imageeditor-toolbar';
3
- import { ImageEditorSidebar } from './imageeditor-sidebar';
3
+ import { ImageEditorSidebar, ImageEditorSidebarTool } from './imageeditor-sidebar';
4
4
  import { Overlay } from '../overlay';
5
5
  import { Loader } from '../loader';
6
6
 
@@ -16,6 +16,9 @@ export type KendoImageEditorProps = {
16
16
  toolbarItems?: React.JSX.Element | React.JSX.Element[];
17
17
  actionPane?: React.JSX.Element | React.JSX.Element[];
18
18
  sidebarItems?: React.JSX.Element | React.JSX.Element[];
19
+ /** The tool whose pane is open; its sidebar button is pressed. */
20
+ activeTool?: ImageEditorSidebarTool;
21
+ /** Shown instead of the canvas while no image is loaded; the toolbar actions and sidebar tools are disabled. */
19
22
  placeholder?: React.JSX.Element;
20
23
  contentHeight?: string;
21
24
  exporting?: boolean;
@@ -28,8 +31,8 @@ export type KendoImageEditorProps = {
28
31
  const defaultOptions = {};
29
32
 
30
33
  /**
31
- * @aria {role="img"} Indicates the canvas role as an image. Applicable when an image is loaded.
32
- * @aria {aria-label|aria-labelledby} Provides an accessible name for the canvas by describing the image content. Applicable when an image is loaded.
34
+ * @aria {role="application"} Indicates that the ImageEditor has its own keyboard navigation implemented.
35
+ * @aria {aria-label} Provides an accessible name for the application.
33
36
  * @aria {role="status"} Announces the busy overlay shown while `exporting` is true.
34
37
  * @ux {Canvas} Renders the image on an editable canvas.
35
38
  * @ux {Crop} A crop tool lets the user select and apply a cropping region.
@@ -46,6 +49,7 @@ export const ImageEditor: KendoComponent<KendoImageEditorProps & React.HTMLAttri
46
49
  toolbarItems,
47
50
  actionPane,
48
51
  sidebarItems,
52
+ activeTool,
49
53
  placeholder,
50
54
  contentHeight,
51
55
  exporting,
@@ -56,6 +60,8 @@ export const ImageEditor: KendoComponent<KendoImageEditorProps & React.HTMLAttri
56
60
  ...other
57
61
  } = props;
58
62
 
63
+ const noImage = Boolean(placeholder);
64
+
59
65
  const canvasContainer = (
60
66
  <div className="k-imageeditor-canvas-container">
61
67
  {placeholder ?? (
@@ -69,10 +75,12 @@ export const ImageEditor: KendoComponent<KendoImageEditorProps & React.HTMLAttri
69
75
  const pane = actionPane &&
70
76
  <div className="k-imageeditor-action-pane">{actionPane}</div>;
71
77
 
72
- const sidebar = <ImageEditorSidebar sidebarItems={sidebarItems} scrollable={sidebarScrollable} scrollingPosition={sidebarScrollingPosition} />;
78
+ const sidebar = <ImageEditorSidebar sidebarItems={sidebarItems} activeTool={activeTool} disabled={noImage} adaptive={adaptive} scrollable={sidebarScrollable} scrollingPosition={sidebarScrollingPosition} />;
73
79
 
74
80
  return (
75
81
  <div
82
+ role="application"
83
+ aria-label="Image Editor"
76
84
  {...other}
77
85
  className={classNames(
78
86
  props.className,
@@ -80,7 +88,7 @@ export const ImageEditor: KendoComponent<KendoImageEditorProps & React.HTMLAttri
80
88
  { [`${IMAGEEDITOR_CLASSNAME}-adaptive`]: adaptive }
81
89
  )}>
82
90
  <div className="k-imageeditor-header">
83
- <ImageEditorToolbar toolbarItems={toolbarItems} />
91
+ <ImageEditorToolbar toolbarItems={toolbarItems} adaptive={adaptive} disabled={noImage} />
84
92
  </div>
85
93
 
86
94
  <div className="k-imageeditor-content" style={{ height: contentHeight }}>
@@ -111,7 +119,7 @@ ImageEditor.moduleName = IMAGEEDITOR_MODULE_NAME;
111
119
  ImageEditor.folderName = IMAGEEDITOR_FOLDER_NAME;
112
120
 
113
121
  /**
114
- * @keyboard {Alt/Opt(Mac) + Number} Focuses the component.
122
+ * @keyboard {Alt/Opt(Mac) + W} Focuses the first focusable element in the Image Editor Toolbar.
115
123
  * @keyboard {Tab} Focuses the next focusable item.
116
124
  * @keyboard {Shift + Tab} Focuses the previous focusable item.
117
125
  * @keyboard {Enter} Presses the focused button.