/// //@ts-ignore import React, { Component } from 'react'; import { Color, Size } from '@dt/core-ui'; /// //@ts-ignore import { i18n } from 'i18next'; import { PaintToolsPlugin } from './PaintToolsPlugin'; import { Bounds, IGcSelectionBox, PointLocation, SelectionBoundsChangedParams } from '../../ImageViewer/Models/SelectionBoxTypes'; import { IViewerTransactionSupport } from '../../ImageViewer/Models/IViewerTransactionSupport'; import { IImageViewer, PaintToolType, ToolbarItemType } from '../../ImageViewer/Models/IImageViewer'; import { PaintToolbarProps, PaintToolbarState, PaintToolbarVariant, SharedUndoHeap } from './types'; import { IImageLayer, IPaintCommand, IPaintDesignerContext, IPaintObject, IPaintObjectDesigner, PaintCommandName, PaintObjectPropertyName } from '../../ImageViewer/Layers/types'; import { SelectedRegionsDispatcher } from './Tools/Selection/SelectedRegionsDispatcher'; import { InternalFilterName } from './Tools/InternalFilters'; import { SelectionToolType } from './Tools/Selection/types'; import { GcSelectionBox } from '../../ImageViewer/Tools/GcSelectionBox'; /** * Paint tools toolbar panel. **/ export declare class PaintToolbar extends Component implements IViewerTransactionSupport, IPaintDesignerContext { static instances: { [id: string]: PaintToolbar | null; }; useSerializedCopyPaste: boolean; private _activatedComboBox?; private _activatedDropdown?; private _colorDropdown; private _selectionToolDropdown; private _cloneStampSourcePoint?; private _cloneStampSourceDistance?; private _isMounted; private _onZoomChangedEventBusHandler?; private _objectDesigners; private _undoCommands; private _undoIndex; private _selectedRegionsDispatcher; insertImageArgs?: { imageData: Uint8Array; commandCreated: boolean; }; private _copiedCommands; private _serializedCopiedCommands; private pendingInsertImageUrl?; constructor(props: any, context: any); /** * Get a reference to an array with object designers. **/ getPaintObjectDesigners(): IPaintObjectDesigner[]; /** * Removes an object designer by its ID and disposes of it. * * @param {string} id - The ID of the object to remove. * @returns {boolean} True if the object was found and removed, false otherwise. */ removeObjectDesigner(id: string): boolean; /** * Finds a paint object designer by its unique identifier. * * @param {string} id - The unique identifier of the paint object designer. * @returns {IPaintObjectDesigner | undefined} The matching designer if found, otherwise undefined. */ findObjectDesigner(id: string): IPaintObjectDesigner | undefined; get selectedRegionsDispatcher(): SelectedRegionsDispatcher; get in17n(): i18n; get isMounted(): boolean; /** * Gets the paint layer containing the HTML canvas for drawing the image. **/ get paintLayer(): IImageLayer; get lastSelectedObjectDesigner(): IPaintObjectDesigner | null; get selectedObjectDesigners(): IPaintObjectDesigner[]; /** * Selected tool type. **/ get selectedToolKey(): PaintToolType; /** * Pencil color. **/ get foreColor(): Color; set foreColor(color: Color); /** * Pencil size. **/ get penSize(): number; set penSize(val: number); /** * Brush size. **/ get brushSize(): number; set brushSize(val: number); /** * Eraser size. **/ get eraserSize(): number; set eraserSize(val: number); /** * Clone Stamp size. **/ get cloneStampSize(): number; set cloneStampSize(val: number); /** * Font size. **/ get fontSize(): number; set fontSize(val: number); onFontSizeChanged(val: number, dirty: boolean): void; /** * Pencil opacity. **/ get pencilOpacity(): number; set pencilOpacity(val: number); /** * Brush opacity. **/ get brushOpacity(): number; set brushOpacity(val: number); /** * Eraser opacity. **/ get eraserOpacity(): number; set eraserOpacity(val: number); /** * Clone Stamp opacity. **/ get cloneStampOpacity(): number; set cloneStampOpacity(val: number); /** * Font opacity. **/ get fontOpacity(): number; set fontOpacity(val: number); limitOpacityBounds(opacity: number): number; /** * Brush hardness. **/ get brushHardness(): number; set brushHardness(val: number); /** * Eraser hardness. **/ get eraserHardness(): number; set eraserHardness(val: number); /** * Clone Stamp hardness. **/ get cloneStampHardness(): number; set cloneStampHardness(val: number); /** * Font name. **/ get fontName(): string; set fontName(val: string); /** * Italic font style. **/ get fontItalic(): boolean; set fontItalic(val: boolean); /** * Bold font style. **/ get fontBold(): boolean; set fontBold(val: boolean); get fontNames(): string[]; get selectionBox(): IGcSelectionBox; get viewer(): IImageViewer; get toolbarVariant(): PaintToolbarVariant; /** * Max possible crop width. **/ get maxWidth(): number; /** * Max possible crop height. **/ get maxHeight(): number; /** * Crop x position. **/ getX(): number; setX(x: number, checkBounds?: boolean): void; /** * Crop y position. **/ getY(): number; setY(y: number, checkBounds?: boolean): void; /** * Crop width. **/ getWidth(): number; /** * Crop height. **/ getHeight(): number; /** * Natural aspect ratio. **/ get naturalRatio(): number; /** * Show toolbar. * @param paintToolsPlugin */ static showDialog(paintToolsPlugin: PaintToolsPlugin): void; /** * Call this method to create paint layer. **/ ensurePaintLayerReady(): Promise; getUndoCommands(): IPaintCommand[]; get scrollContainer(): HTMLDivElement; toggleOriginalImageAppearance(hideOriginalImage: boolean): void; limitLineSizeBounds(val: number): number; limitHardnessBounds(val: number): number; limitFontSizeBounds(val: number): number; clearSelection(): void; /** * Use the original image as source while applying edits. **/ get useOriginalImage(): boolean; /** * Use the original image as source while applying edits. **/ set useOriginalImage(value: boolean); repaint(): Promise; selectImageUsingDialog(): Promise; /** * Toggle active paint tool. * @param toolKey Optional. Tool type. * @param checked Optional. Checked state. **/ toggleTool(toolKey?: PaintToolType, checked?: boolean): Promise; /** * Called when paint object property changed. **/ onPaintObjectPropertyChanged(propertyName: PaintObjectPropertyName, val: any, dirty?: boolean): void; onPaintObjectSelection(designer: IPaintObjectDesigner, selected: boolean): void; /** * Show toolbar. **/ show(): void; /** * Hide toolbar. **/ hide(): void; _startSelectionCoords: PointLocation; executeTempPaintCommand(cmd: IPaintCommand): void; flushTempPaintCommands(mainCtx: CanvasRenderingContext2D, backCtx: CanvasRenderingContext2D): void; confirmClose(saveChangesVariant?: boolean): Promise; onSelectionBoundsChanged(penCoords: PointLocation[] | Bounds, params: SelectionBoundsChangedParams): Promise; _freeFormSelectionBox: GcSelectionBox; get freeFormSelectionBox(): GcSelectionBox; rasterizePaintObject(paintObject: IPaintObject): void; getSelectedClipPaths(relativeToBounds?: boolean): Path2D[]; selectAll(): void; copySelectedRegions(): boolean; get paintCanvasScale(): number; get leftTopVisiblePosition(): PointLocation; pasteSelectedRegions(): void; executePaintCommand(cmd: IPaintCommand | null, mainCtx?: CanvasRenderingContext2D, backCtx?: CanvasRenderingContext2D): void; storePaintCommand(cmd: IPaintCommand): void; get hasUndoPaint(): boolean; get hasRedoPaint(): boolean; isObjectCommand(cmd?: IPaintCommand): boolean; shouldBreakUndoSequence(cmd: IPaintCommand | undefined, prevCmdName: PaintCommandName | undefined, sharedHeap?: SharedUndoHeap): boolean; get undoIndex(): number; /** * * @param endIndex Optional. End undo index (excluding). */ undoPaint(endIndex?: number): Promise; redoPaint(): Promise; ensureSelectedObject(): void; paintCommands(startCommandIndex: number, endCommandIndex: number): Promise; ensureSelectionBox(): void; showSelectionBox(toolKey: PaintToolType): void; updateSelectionBox(): void; disableSelectionBox(): void; hideSelectionBox(): void; componentWillUnmount(): void; componentDidMount(): void; saveStateToLocalStorage(): void; loadStateFromLocalStorage(callback: any): void; protected renderToolbarItems(toolbarLayout: ToolbarItemType[]): JSX.Element[]; protected getCurrentToolbarLayout(): ToolbarItemType[]; render(): React.JSX.Element | null; apply(): Promise; confirmChanges(): Promise; cancelChanges(): Promise; /** * Undo viewer transaction step. Return true if undo operation is consumed. **/ undoTransactionStep(): boolean | void; /** * Redo viewer transaction step. Return true if redo operation is consumed. **/ redoTransactionStep(): boolean | void; getSizeToolParams(selectedToolKey?: PaintToolType): { sizeSelectDisabled: boolean; sizeFromState: string | number | undefined; hardnessFromState: string | number | undefined; opacityFromState: string | number | undefined; disableOpacity: any; disableHardness: any; }; renderImageGalleryTool(selectedToolKey?: PaintToolType): JSX.Element; renderSizeTool(selectedToolKey?: PaintToolType, lastSelectedBrushToolKey?: PaintToolType): JSX.Element; private onColorSelect; onSelectionToolSelect(selectionToolType: SelectionToolType): void; get plugin(): PaintToolsPlugin; get selectionToolType(): SelectionToolType; set selectionToolType(selectionToolType: SelectionToolType); /** * Tool size. **/ get toolSize(): number; getToolSize(paintToolType: PaintToolType, defaultValue?: number): number; set toolSize(val: number); getToolHardness(toolType: PaintToolType, defaultValue?: number): number; /** * Tool hardness. **/ get toolHardness(): number; set toolHardness(val: number); /** * Tool opacity. **/ get toolOpacity(): number; set toolOpacity(val: number); protected createNewObjectCommand(toolType: PaintToolType, coords: PointLocation): IPaintCommand; private onSizeSelect; private onFonSizeSelect; private onFontNameSelect; private closeActiveComboBox; private _bindEvents; onKeyDown(e: KeyboardEvent, params: { alt: boolean; space: boolean; shift: boolean; }): void; commitSelectedRegion(): void; finishSelectedRegion(force?: boolean): boolean; onKeyUp(e: KeyboardEvent, params: { alt: boolean; space: boolean; shift: boolean; }): void; onCut(): Promise; /** * Serializes and downloads the current command stack as a JSON file. * If the browser supports the File System Access API, a native "Save as..." dialog * will be used (user can edit the filename). Otherwise the method falls back to * creating a Blob and triggering a download via an anchor element (with an optional prompt). * * @param args - Options for export. `objectsOnly: true` will attempt to export only object-related commands. * @returns {Promise} Resolves when the download/save operation is initiated or completed. * @throws {Error} When serialization or file writing fails. */ downloadCommandStack(args?: { objectsOnly: boolean; }): Promise; uploadCommandStack(): Promise; /** * Opens a file dialog to load commands from a JSON file * @returns {Promise} Promise resolving with loaded commands */ importCommandsFromFile(): Promise; /** * Handles import errors and shows user-friendly messages * @param {Error} error - The error that occurred */ private handleImportError; /** * Serializes an array of paint commands to a JSON string * @param {IPaintCommand[]} commands - Array of paint commands to serialize * @returns {string} JSON string representing the command stack * @throws {Error} When invalid commands are provided */ exportCommands(commands: IPaintCommand[]): string; /** * Deserializes a JSON string to an array of paint commands * @param {string} serializedData - JSON string containing serialized commands * @returns {IPaintCommand[]} Array of reconstructed paint commands * @throws {Error} When the data cannot be deserialized */ importCommands(serializedData: string): Promise; copySelectedObjects(): void; pasteSelectedObjects(): Promise; executePaintCommands(commands: (IPaintCommand | null)[]): void; deleteSelectedObjects(): void; onSelectAll(): void; onCopy(): void; onPaste(): void; applyRegionFilter(filter: InternalFilterName, intencityValue1?: number, intencityValue2?: number, replaceSameFilter?: boolean): Promise; onDeleteKeyDown(): Promise; deleteObject(objectDesigner: IPaintObjectDesigner): void; private _unbindEvents; } export declare function renderPenWidthComboBox(controlWidth: number, pencilWidthValue: number | string | undefined, in17n: any, onSelect: (value: any, dirty: boolean) => void, refCallback: any, size?: Size, disabled?: boolean): React.JSX.Element;