{"version":3,"sources":["../src/BBoxSelector/index.tsx","../src/LabelBox/index.tsx","../src/BBoxAnnotator/index.tsx","../src/index.tsx"],"names":["jsx","React","useState","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react';\n\ninterface Props {\n    rectangle: { left: number; top: number; width: number; height: number };\n    borderWidth?: number;\n}\nconst BBoxSelector: React.FC<Props> = ({ rectangle, borderWidth = 2 }) => {\n    return (\n        <div\n            style={{\n                position: 'absolute',\n                border: `${borderWidth}px dotted rgb(127,255,127)`,\n                left: `${rectangle.left - borderWidth}px`,\n                top: `${rectangle.top - borderWidth}px`,\n                width: `${rectangle.width}px`,\n                height: `${rectangle.height}px`,\n            }}\n        ></div>\n    );\n};\nBBoxSelector.displayName = 'BBoxSelector';\nexport default BBoxSelector;\n","import React, { useState } from 'react';\n\ninterface Props {\n    left: number;\n    top: number;\n    inputMethod: 'text' | 'select';\n    labels?: string | string[];\n    initialValue?: string;\n    onSubmit: (label: string) => void;\n}\nconst LabelBox = React.forwardRef<any, Props>(({ inputMethod, ...props }, forwardedRef) => {\n    const [value, setValue] = useState(props.initialValue ?? '');\n    const changeHandler = (e: React.ChangeEvent<HTMLInputElement> | React.ChangeEvent<HTMLSelectElement>) => {\n        setValue(e.target.value);\n        if (inputMethod === 'select') {\n            props.onSubmit(e.target.value);\n        }\n    };\n    const keyDownHandler = (e: React.KeyboardEvent) => {\n        if (e.key === 'Enter') {\n            props.onSubmit(value);\n            e.preventDefault();\n            return;\n        }\n    };\n    let { labels = ['object'] } = props;\n    if (typeof labels === 'string') {\n        labels = [labels];\n    }\n    let labelInput;\n    switch (inputMethod) {\n        case 'select':\n            labelInput = (\n                <select\n                    name=\"label\"\n                    ref={forwardedRef}\n                    onChange={changeHandler}\n                    defaultValue={props.initialValue || ''}\n                    onMouseDown={(e) => e.stopPropagation()}\n                >\n                    <option value=\"\">choose an item</option>\n                    {labels.map((label) => (\n                        <option key={label} value={label}>\n                            {label}\n                        </option>\n                    ))}\n                </select>\n            );\n            break;\n        case 'text':\n            labelInput = (\n                <input\n                    name=\"label\"\n                    type=\"text\"\n                    value={value}\n                    ref={forwardedRef}\n                    onKeyDown={keyDownHandler}\n                    onChange={changeHandler}\n                    onMouseDown={(e) => e.stopPropagation()}\n                />\n            );\n            break;\n        default:\n            throw new Error(`Invalid labelInput parameter: ${inputMethod}`);\n    }\n\n    return (\n        <div\n            style={{\n                position: 'absolute',\n                left: `${props.left}px`,\n                top: `${props.top}px`,\n            }}\n        >\n            {labelInput}\n        </div>\n    );\n});\nLabelBox.displayName = 'LabelBox';\n\nexport default LabelBox;\n","import React, { useRef, useEffect, useState, useImperativeHandle } from 'react';\nimport BBoxSelector from '../BBoxSelector';\nimport LabelBox from '../LabelBox';\n\nexport type EntryType = {\n    left: number;\n    top: number;\n    width: number;\n    height: number;\n    label: string;\n};\ntype Props = {\n    url: string;\n    inputMethod: 'text' | 'select';\n    labels?: string | string[];\n    onChange: (entries: EntryType[]) => void;\n    borderWidth?: number;\n};\n\nconst BBoxAnnotator = React.forwardRef<any, Props>(({ url, borderWidth = 2, inputMethod, labels, onChange }, ref) => {\n    const [pointer, setPointer] = useState<{ x: number; y: number } | null>(null);\n    const [offset, setOffset] = useState<{ x: number; y: number } | null>(null);\n    const [entries, setEntries] = useState<\n        ({\n            id: string;\n            showCloseButton: boolean;\n        } & EntryType)[]\n    >([]);\n    const [selectedId, setSelectedId] = useState<string | null>(null);\n    const [editingLabelForId, setEditingLabelForId] = useState<string | null>(null);\n    const [dragging, setDragging] = useState<{\n        id: string;\n        offsetX: number;\n        offsetY: number;\n    } | null>(null);\n    const [resizing, setResizing] = useState<{\n        id: string;\n        handle: 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw';\n        startX: number;\n        startY: number;\n        startRect: { left: number; top: number; width: number; height: number };\n    } | null>(null);\n    const [multiplier, setMultiplier] = useState(1);\n    useEffect(() => {\n        onChange(\n            entries.map((entry) => ({\n                width: Math.round(entry.width * multiplier),\n                height: Math.round(entry.height * multiplier),\n                top: Math.round(entry.top * multiplier),\n                left: Math.round(entry.left * multiplier),\n                label: entry.label,\n            })),\n        );\n    }, [entries, multiplier]);\n    const [status, setStatus] = useState<'free' | 'input' | 'hold'>('free');\n    const [bBoxAnnotatorStyle, setBboxAnnotatorStyle] = useState<{ width?: number; height?: number }>({});\n    const [imageFrameStyle, setImageFrameStyle] = useState<{\n        width?: number;\n        height?: number;\n        backgroundImageSrc?: string;\n    }>({});\n\n    const bBoxAnnotatorRef = useRef<HTMLDivElement>(null);\n    const labelInputRef = useRef<HTMLDivElement>(null);\n    useEffect(() => {\n        const maxWidth = bBoxAnnotatorRef.current?.offsetWidth || 1;\n        const imageElement = new Image();\n        imageElement.src = url;\n        imageElement.onload = function () {\n            const width = imageElement.naturalWidth || imageElement.width;\n            const height = imageElement.naturalHeight || imageElement.height;\n            const scale = width / maxWidth;\n            const displayWidth = Math.round(width / scale);\n            const displayHeight = Math.round(height / scale);\n            setMultiplier(scale);\n            setBboxAnnotatorStyle({\n                width: displayWidth,\n                height: displayHeight,\n            });\n            setImageFrameStyle({\n                backgroundImageSrc: imageElement.src,\n                width: displayWidth,\n                height: displayHeight,\n            });\n        };\n        imageElement.onerror = function () {\n            throw new Error('Invalid image URL: ' + url);\n        };\n    }, [url]);\n\n    const crop = (pageX: number, pageY: number) => {\n        return {\n            x:\n                bBoxAnnotatorRef.current && imageFrameStyle.width\n                    ? Math.min(\n                          Math.max(Math.round(pageX - bBoxAnnotatorRef.current.offsetLeft), 0),\n                          Math.round(imageFrameStyle.width - 1),\n                      )\n                    : 0,\n            y:\n                bBoxAnnotatorRef.current && imageFrameStyle.height\n                    ? Math.min(\n                          Math.max(Math.round(pageY - bBoxAnnotatorRef.current.offsetTop), 0),\n                          Math.round(imageFrameStyle.height - 1),\n                      )\n                    : 0,\n        };\n    };\n    const updateRectangle = (pageX: number, pageY: number) => {\n        setPointer(crop(pageX, pageY));\n    };\n\n    useEffect(() => {\n        const mouseMoveHandler = (e: MouseEvent) => {\n            switch (status) {\n                case 'hold':\n                    updateRectangle(e.pageX, e.pageY);\n            }\n        };\n        window.addEventListener('mousemove', mouseMoveHandler);\n        return () => window.removeEventListener('mousemove', mouseMoveHandler);\n    }, [status]);\n\n    useEffect(() => {\n        const mouseUpHandler = (e: MouseEvent) => {\n            switch (status) {\n                case 'hold':\n                    updateRectangle(e.pageX, e.pageY);\n                    setStatus('input');\n                    labelInputRef.current?.focus();\n            }\n        };\n        window.addEventListener('mouseup', mouseUpHandler);\n        return () => window.removeEventListener('mouseup', mouseUpHandler);\n    }, [status, labelInputRef]);\n\n    const addEntry = (label: string) => {\n        setEntries([...entries, { ...rect, label, id: crypto.randomUUID(), showCloseButton: false }]);\n        setStatus('free');\n        setPointer(null);\n        setOffset(null);\n    };\n\n    const submitEditLabel = (label: string) => {\n        if (!editingLabelForId) return;\n        setEntries((prev) => prev.map((e) => (e.id === editingLabelForId ? { ...e, label } : e)));\n        setEditingLabelForId(null);\n    };\n\n    const mouseDownHandler = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n        // clicking the background starts a new rectangle\n        switch (status) {\n            case 'free':\n            case 'input':\n                if (e.button !== 2) {\n                    setOffset(crop(e.pageX, e.pageY));\n                    setPointer(crop(e.pageX, e.pageY));\n                    setStatus('hold');\n                    setSelectedId(null);\n                    setEditingLabelForId(null);\n                }\n        }\n    };\n\n    const rectangle = () => {\n        const x1 = offset && pointer ? Math.min(offset.x, pointer.x) : 0;\n        const x2 = offset && pointer ? Math.max(offset.x, pointer.x) : 0;\n        const y1 = offset && pointer ? Math.min(offset.y, pointer.y) : 0;\n        const y2 = offset && pointer ? Math.max(offset.y, pointer.y) : 0;\n        return {\n            left: x1,\n            top: y1,\n            width: x2 - x1 + 1,\n            height: y2 - y1 + 1,\n        };\n    };\n\n    useImperativeHandle(ref, () => ({\n        reset() {\n            setEntries([]);\n        },\n    }));\n    const rect = rectangle();\n\n    // drag existing entry around\n    useEffect(() => {\n        if (!dragging) return;\n        const onMove = (e: MouseEvent) => {\n            const pos = crop(e.pageX, e.pageY);\n            setEntries((prev) =>\n                prev.map((entry) => {\n                    if (entry.id !== dragging.id) return entry;\n                    const newLeft = Math.max(\n                        0,\n                        Math.min((imageFrameStyle.width || 0) - entry.width - 1, pos.x - dragging.offsetX),\n                    );\n                    const newTop = Math.max(\n                        0,\n                        Math.min((imageFrameStyle.height || 0) - entry.height - 1, pos.y - dragging.offsetY),\n                    );\n                    return { ...entry, left: newLeft, top: newTop };\n                }),\n            );\n        };\n        const onUp = () => {\n            setDragging(null);\n        };\n        window.addEventListener('mousemove', onMove);\n        window.addEventListener('mouseup', onUp);\n        return () => {\n            window.removeEventListener('mousemove', onMove);\n            window.removeEventListener('mouseup', onUp);\n        };\n    }, [dragging, imageFrameStyle.height, imageFrameStyle.width]);\n\n    // resize existing entry\n    useEffect(() => {\n        if (!resizing) return;\n        const onMove = (e: MouseEvent) => {\n            const pos = crop(e.pageX, e.pageY);\n            const imgW = imageFrameStyle.width || 0;\n            const imgH = imageFrameStyle.height || 0;\n            const minW = 1;\n            const minH = 1;\n            const dx = pos.x - resizing.startX;\n            const dy = pos.y - resizing.startY;\n            setEntries((prev) =>\n                prev.map((entry) => {\n                    if (entry.id !== resizing.id) return entry;\n                    let newLeft = resizing.startRect.left;\n                    let newTop = resizing.startRect.top;\n                    let newWidth = resizing.startRect.width;\n                    let newHeight = resizing.startRect.height;\n                    switch (resizing.handle) {\n                        case 'e': {\n                            const maxWidth = imgW - resizing.startRect.left - 1;\n                            newWidth = Math.max(minW, Math.min(resizing.startRect.width + dx, maxWidth));\n                            break;\n                        }\n                        case 's': {\n                            const maxHeight = imgH - resizing.startRect.top - 1;\n                            newHeight = Math.max(minH, Math.min(resizing.startRect.height + dy, maxHeight));\n                            break;\n                        }\n                        case 'se': {\n                            const maxWidth = imgW - resizing.startRect.left - 1;\n                            const maxHeight = imgH - resizing.startRect.top - 1;\n                            newWidth = Math.max(minW, Math.min(resizing.startRect.width + dx, maxWidth));\n                            newHeight = Math.max(minH, Math.min(resizing.startRect.height + dy, maxHeight));\n                            break;\n                        }\n                        case 'w': {\n                            const maxLeft = resizing.startRect.left + resizing.startRect.width - minW;\n                            newLeft = Math.max(0, Math.min(resizing.startRect.left + dx, maxLeft));\n                            newWidth = resizing.startRect.width - (newLeft - resizing.startRect.left);\n                            break;\n                        }\n                        case 'n': {\n                            const maxTop = resizing.startRect.top + resizing.startRect.height - minH;\n                            newTop = Math.max(0, Math.min(resizing.startRect.top + dy, maxTop));\n                            newHeight = resizing.startRect.height - (newTop - resizing.startRect.top);\n                            break;\n                        }\n                        case 'nw': {\n                            const maxLeft = resizing.startRect.left + resizing.startRect.width - minW;\n                            const maxTop = resizing.startRect.top + resizing.startRect.height - minH;\n                            newLeft = Math.max(0, Math.min(resizing.startRect.left + dx, maxLeft));\n                            newTop = Math.max(0, Math.min(resizing.startRect.top + dy, maxTop));\n                            newWidth = resizing.startRect.width - (newLeft - resizing.startRect.left);\n                            newHeight = resizing.startRect.height - (newTop - resizing.startRect.top);\n                            break;\n                        }\n                        case 'ne': {\n                            const maxTop = resizing.startRect.top + resizing.startRect.height - minH;\n                            const maxWidth = imgW - resizing.startRect.left - 1;\n                            newTop = Math.max(0, Math.min(resizing.startRect.top + dy, maxTop));\n                            newHeight = resizing.startRect.height - (newTop - resizing.startRect.top);\n                            newWidth = Math.max(minW, Math.min(resizing.startRect.width + dx, maxWidth));\n                            break;\n                        }\n                        case 'sw': {\n                            const maxLeft = resizing.startRect.left + resizing.startRect.width - minW;\n                            const maxHeight = imgH - resizing.startRect.top - 1;\n                            newLeft = Math.max(0, Math.min(resizing.startRect.left + dx, maxLeft));\n                            newWidth = resizing.startRect.width - (newLeft - resizing.startRect.left);\n                            newHeight = Math.max(minH, Math.min(resizing.startRect.height + dy, maxHeight));\n                            break;\n                        }\n                        default:\n                            break;\n                    }\n                    // clamp to image bounds for safety\n                    newLeft = Math.max(0, Math.min(newLeft, imgW - newWidth - 1));\n                    newTop = Math.max(0, Math.min(newTop, imgH - newHeight - 1));\n                    return { ...entry, left: newLeft, top: newTop, width: newWidth, height: newHeight };\n                }),\n            );\n        };\n        const onUp = () => {\n            setResizing(null);\n        };\n        window.addEventListener('mousemove', onMove);\n        window.addEventListener('mouseup', onUp);\n        return () => {\n            window.removeEventListener('mousemove', onMove);\n            window.removeEventListener('mouseup', onUp);\n        };\n    }, [resizing, imageFrameStyle.height, imageFrameStyle.width]);\n\n    return (\n        <div\n            style={{\n                cursor: status === 'hold' ? 'crosshair' : dragging ? 'grabbing' : 'crosshair',\n                width: `${bBoxAnnotatorStyle.width}px`,\n                height: `${bBoxAnnotatorStyle.height}px`,\n            }}\n            ref={bBoxAnnotatorRef}\n            onMouseDown={mouseDownHandler}\n        >\n            <div\n                style={{\n                    position: 'relative',\n                    backgroundSize: '100%',\n                    width: `${imageFrameStyle.width}px`,\n                    height: `${imageFrameStyle.height}px`,\n                    backgroundImage: `url(${imageFrameStyle.backgroundImageSrc})`,\n                }}\n            >\n                {status === 'hold' || status === 'input' ? <BBoxSelector rectangle={rect} /> : null}\n                {status === 'input' ? (\n                    <LabelBox\n                        inputMethod={inputMethod}\n                        top={rect.top + rect.height + borderWidth}\n                        left={rect.left - borderWidth}\n                        labels={labels}\n                        onSubmit={addEntry}\n                        ref={labelInputRef}\n                    />\n                ) : null}\n                {entries.map((entry, i) => (\n                    <div\n                        style={{\n                            border:\n                                selectedId === entry.id\n                                    ? `${borderWidth}px solid rgb(0,128,255)`\n                                    : `${borderWidth}px solid rgb(255,0,0)`,\n                            position: 'absolute',\n                            top: `${entry.top - borderWidth}px`,\n                            left: `${entry.left - borderWidth}px`,\n                            width: `${entry.width}px`,\n                            height: `${entry.height}px`,\n                            color: 'rgb(255,0,0)',\n                            fontFamily: 'monospace',\n                            fontSize: 'small',\n                            cursor: selectedId === entry.id ? 'move' : 'default',\n                        }}\n                        key={i}\n                        onMouseOver={() =>\n                            setEntries((prevEntries) =>\n                                prevEntries.map((e) => (e.id === entry.id ? { ...e, showCloseButton: true } : e)),\n                            )\n                        }\n                        onMouseLeave={() =>\n                            setEntries((prevEntries) =>\n                                prevEntries.map((e) => (e.id === entry.id ? { ...e, showCloseButton: false } : e)),\n                            )\n                        }\n                        onMouseDown={(e) => {\n                            e.stopPropagation();\n                            setSelectedId(entry.id);\n                            const pos = crop(e.pageX, e.pageY);\n                            setDragging({\n                                id: entry.id,\n                                offsetX: pos.x - entry.left,\n                                offsetY: pos.y - entry.top,\n                            });\n                        }}\n                        onDoubleClick={(e) => {\n                            e.stopPropagation();\n                            setSelectedId(entry.id);\n                            setEditingLabelForId(entry.id);\n                        }}\n                    >\n                        {entry.showCloseButton ? (\n                            <div\n                                style={{\n                                    position: 'absolute',\n                                    top: '-8px',\n                                    right: '-8px',\n                                    width: '16px',\n                                    height: '0',\n                                    padding: '16px 0 0 0',\n                                    overflow: 'hidden',\n                                    color: '#fff',\n                                    backgroundColor: '#030',\n                                    border: '2px solid #fff',\n                                    borderRadius: '18px',\n                                    cursor: 'pointer',\n                                    userSelect: 'none',\n                                    textAlign: 'center',\n                                }}\n                                onMouseDown={(e) => {\n                                    e.stopPropagation();\n                                }}\n                                onClick={() => {\n                                    setEntries(entries.filter((e) => e.id !== entry.id));\n                                    if (selectedId === entry.id) setSelectedId(null);\n                                    if (editingLabelForId === entry.id) setEditingLabelForId(null);\n                                }}\n                            >\n                                <div\n                                    style={{\n                                        display: 'block',\n                                        textAlign: 'center',\n                                        width: '16px',\n                                        position: 'absolute',\n                                        top: '-2px',\n                                        left: '0',\n                                        fontSize: '16px',\n                                        lineHeight: '16px',\n                                        fontFamily:\n                                            '\"Helvetica Neue\", Consolas, Verdana, Tahoma, Calibri, ' +\n                                            'Helvetica, Menlo, \"Droid Sans\", sans-serif',\n                                    }}\n                                >\n                                    &#215;\n                                </div>\n                            </div>\n                        ) : null}\n                        <div style={{ overflow: 'hidden' }}>{entry.label}</div>\n                        {selectedId === entry.id ? (\n                            <>\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        top: '-5px',\n                                        left: '-5px',\n                                        cursor: 'nwse-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'nw',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        top: '-5px',\n                                        left: '50%',\n                                        transform: 'translateX(-50%)',\n                                        cursor: 'ns-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'n',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        top: '-5px',\n                                        right: '-5px',\n                                        cursor: 'nesw-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'ne',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        top: '50%',\n                                        right: '-5px',\n                                        transform: 'translateY(-50%)',\n                                        cursor: 'ew-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'e',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        bottom: '-5px',\n                                        right: '-5px',\n                                        cursor: 'nwse-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'se',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        bottom: '-5px',\n                                        left: '50%',\n                                        transform: 'translateX(-50%)',\n                                        cursor: 'ns-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 's',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        bottom: '-5px',\n                                        left: '-5px',\n                                        cursor: 'nesw-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'sw',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                                <div\n                                    style={{\n                                        position: 'absolute',\n                                        width: '8px',\n                                        height: '8px',\n                                        background: '#fff',\n                                        border: '1px solid #007bff',\n                                        top: '50%',\n                                        left: '-5px',\n                                        transform: 'translateY(-50%)',\n                                        cursor: 'ew-resize',\n                                    }}\n                                    onMouseDown={(e) => {\n                                        e.stopPropagation();\n                                        const pos = crop(e.pageX, e.pageY);\n                                        setResizing({\n                                            id: entry.id,\n                                            handle: 'w',\n                                            startX: pos.x,\n                                            startY: pos.y,\n                                            startRect: {\n                                                left: entry.left,\n                                                top: entry.top,\n                                                width: entry.width,\n                                                height: entry.height,\n                                            },\n                                        });\n                                    }}\n                                />\n                            </>\n                        ) : null}\n                        {editingLabelForId === entry.id ? (\n                            <LabelBox\n                                inputMethod={inputMethod}\n                                top={entry.height + borderWidth}\n                                left={-borderWidth}\n                                labels={labels}\n                                initialValue={entry.label}\n                                onSubmit={submitEditLabel}\n                            />\n                        ) : null}\n                    </div>\n                ))}\n            </div>\n        </div>\n    );\n});\nBBoxAnnotator.displayName = 'BBoxAnnotator';\nexport default BBoxAnnotator;\n","import BBoxAnnotator, { EntryType } from './BBoxAnnotator';\n\nexport { EntryType };\nexport default BBoxAnnotator;\n"]}