react-pdf-ner-annotator
Version:
A React component to annotate named entities directly onto a PDF.
88 lines • 4.75 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var react_1 = __importStar(require("react"));
var textMapHelpers_1 = require("../../helpers/textMapHelpers");
var Token_1 = __importDefault(require("./Token"));
var Mark_1 = __importDefault(require("./Mark"));
var generalHelpers_1 = require("../../helpers/generalHelpers");
var annotationContext_1 = __importDefault(require("../../context/annotationContext"));
var TokenContainer = function (_a) {
var textLayerItem = _a.textLayerItem, tokens = _a.tokens, offset = _a.offset, pageNumber = _a.pageNumber;
var index = 0;
var spaceAsMark = false;
var text = textLayerItem.text, coords = textLayerItem.coords, fontSize = textLayerItem.fontSize, transform = textLayerItem.transform, fontFamily = textLayerItem.fontFamily;
var context = (0, react_1.useContext)(annotationContext_1["default"]);
var annotations = (0, react_1.useMemo)(function () {
return context.annotations.filter(function (annotation) { return !!annotation.nerAnnotation && annotation.page === pageNumber; });
}, [context, pageNumber]);
var metrics = (0, react_1.useMemo)(function () { return (0, textMapHelpers_1.getTextMetrics)(text); }, [text]);
var scale = (0, react_1.useMemo)(function () { return ({
x: coords.width / metrics.width,
y: coords.height / metrics.height
}); }, [metrics, coords]);
var style = (0, react_1.useMemo)(function () {
if (fontSize && transform && fontFamily) {
return {
left: "".concat(coords.left, "px"),
top: "".concat(coords.top, "px"),
fontSize: "".concat(fontSize, "px"),
fontFamily: "".concat(fontFamily),
transform: "scaleX(".concat(transform, ")")
};
}
return {
left: "".concat(coords.left, "px"),
top: "".concat(coords.top, "px"),
width: "".concat(coords.width, "px"),
height: "".concat(coords.height, "px"),
font: '12px sans-serif',
transform: "scale(".concat(scale.x, ", ").concat(scale.y, ")")
};
}, [fontSize, transform, fontFamily, coords.left, coords.top, coords.width, coords.height, scale.x, scale.y]);
return (react_1["default"].createElement("span", { className: "token-container", style: style }, tokens.map(function (token, keyIndex) {
var dataI = textLayerItem.dataI || offset + index + 1;
var annotation = annotations.find(function (a) { return a.nerAnnotation.textIds.includes(dataI); });
var tokenIndexIsNotFirstOrLast = (0, generalHelpers_1.isBetween)(keyIndex, 0, tokens.length - 1);
if (token === ' ') {
if (annotation && spaceAsMark && tokenIndexIsNotFirstOrLast) {
spaceAsMark = false;
return react_1["default"].createElement(Mark_1["default"], { key: keyIndex, token: token, annotation: annotation });
}
return react_1["default"].createElement(Token_1["default"], { key: keyIndex, token: token });
}
index += 1;
if (annotation) {
spaceAsMark = true;
return react_1["default"].createElement(Mark_1["default"], { key: keyIndex, token: token, annotation: annotation });
}
return react_1["default"].createElement(Token_1["default"], { key: keyIndex, token: token, dataI: dataI });
})));
};
exports["default"] = (0, react_1.memo)(TokenContainer);
//# sourceMappingURL=TokenContainer.js.map