UNPKG

react-pdf-ner-annotator

Version:

A React component to annotate named entities directly onto a PDF.

88 lines 4.75 kB
"use strict"; 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