UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton

280 lines 14.6 kB
import _extends from "@babel/runtime/helpers/extends"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import _regeneratorRuntime from "@babel/runtime/regenerator"; import React, { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import mammoth from "mammoth"; import jsPDF from 'jspdf'; function HUDTextPreview(hudTextPreviewConfigurationSettings) { var _hudTextPreviewConfig = hudTextPreviewConfigurationSettings.previewContainerConfigurationSettings, previewContainerConfigurationSettings = _hudTextPreviewConfig === void 0 ? {} : _hudTextPreviewConfig, _hudTextPreviewConfig2 = hudTextPreviewConfigurationSettings.highlightConfigurationSettings, highlightConfigurationSettings = _hudTextPreviewConfig2 === void 0 ? {} : _hudTextPreviewConfig2, _hudTextPreviewConfig3 = hudTextPreviewConfigurationSettings.redactConfigurationSettings, redactConfigurationSettings = _hudTextPreviewConfig3 === void 0 ? {} : _hudTextPreviewConfig3, _hudTextPreviewConfig4 = hudTextPreviewConfigurationSettings.textConfigurationSettings, textConfigurationSettings = _hudTextPreviewConfig4 === void 0 ? {} : _hudTextPreviewConfig4, _hudTextPreviewConfig5 = hudTextPreviewConfigurationSettings.pageConfigurationSettings, pageConfigurationSettings = _hudTextPreviewConfig5 === void 0 ? {} : _hudTextPreviewConfig5, _hudTextPreviewConfig6 = hudTextPreviewConfigurationSettings.previewContainerConfigurations, previewContainerConfigurations = _hudTextPreviewConfig6 === void 0 ? {} : _hudTextPreviewConfig6, _hudTextPreviewConfig7 = hudTextPreviewConfigurationSettings.pageConfigurations, pageConfigurations = _hudTextPreviewConfig7 === void 0 ? {} : _hudTextPreviewConfig7, textFile = hudTextPreviewConfigurationSettings.textFile, pdfFile = hudTextPreviewConfigurationSettings.pdfFile, docFile = hudTextPreviewConfigurationSettings.docFile, _hudTextPreviewConfig8 = hudTextPreviewConfigurationSettings.charsPerPage, charsPerPage = _hudTextPreviewConfig8 === void 0 ? 1000 : _hudTextPreviewConfig8, _hudTextPreviewConfig9 = hudTextPreviewConfigurationSettings.pageSwitchInterval, pageSwitchInterval = _hudTextPreviewConfig9 === void 0 ? 3000 : _hudTextPreviewConfig9, _hudTextPreviewConfig10 = hudTextPreviewConfigurationSettings.initialTextPages, initialTextPages = _hudTextPreviewConfig10 === void 0 ? [] : _hudTextPreviewConfig10, _hudTextPreviewConfig11 = hudTextPreviewConfigurationSettings.theme, theme = _hudTextPreviewConfig11 === void 0 ? "dark" : _hudTextPreviewConfig11, _hudTextPreviewConfig12 = hudTextPreviewConfigurationSettings.fontFamily, fontFamily = _hudTextPreviewConfig12 === void 0 ? "Arial" : _hudTextPreviewConfig12, _hudTextPreviewConfig13 = hudTextPreviewConfigurationSettings.fontSize, fontSize = _hudTextPreviewConfig13 === void 0 ? "18px" : _hudTextPreviewConfig13, _hudTextPreviewConfig14 = hudTextPreviewConfigurationSettings.textAlign, textAlign = _hudTextPreviewConfig14 === void 0 ? "left" : _hudTextPreviewConfig14, _hudTextPreviewConfig15 = hudTextPreviewConfigurationSettings.highlightDelay, highlightDelay = _hudTextPreviewConfig15 === void 0 ? 0.2869 : _hudTextPreviewConfig15, _hudTextPreviewConfig16 = hudTextPreviewConfigurationSettings.redactDelay, redactDelay = _hudTextPreviewConfig16 === void 0 ? 0.2869 : _hudTextPreviewConfig16, _hudTextPreviewConfig17 = hudTextPreviewConfigurationSettings.highlightWords, highlightWords = _hudTextPreviewConfig17 === void 0 ? [] : _hudTextPreviewConfig17, _hudTextPreviewConfig18 = hudTextPreviewConfigurationSettings.redactWords, redactWords = _hudTextPreviewConfig18 === void 0 ? [] : _hudTextPreviewConfig18, _hudTextPreviewConfig19 = hudTextPreviewConfigurationSettings.redactColor, redactColor = _hudTextPreviewConfig19 === void 0 ? "black" : _hudTextPreviewConfig19, _hudTextPreviewConfig20 = hudTextPreviewConfigurationSettings.lineCount, lineCount = _hudTextPreviewConfig20 === void 0 ? Infinity : _hudTextPreviewConfig20, _hudTextPreviewConfig21 = hudTextPreviewConfigurationSettings.scrollable, scrollable = _hudTextPreviewConfig21 === void 0 ? false : _hudTextPreviewConfig21; var _useState = useState(0), _useState2 = _slicedToArray(_useState, 2), currentPage = _useState2[0], setCurrentPage = _useState2[1]; var _useState3 = useState([]), _useState4 = _slicedToArray(_useState3, 2), textPages = _useState4[0], setTextPages = _useState4[1]; var totalPages = textPages.length; var themeStyles = { light: { boxShadow: "0 4px 15px rgba(0, 0, 0, 0.1)", background: "linear-gradient(to right, #ffffff, #e0e0e0)", color: "#000000" }, dark: { boxShadow: "0 4px 30px rgba(0, 0, 0, 0.5)", background: "linear-gradient(to right, #1a1a2e, #16213e)", color: "#ffffff" } }; var applyCustomStyles = function applyCustomStyles(text) { var styledText = text; redactWords.forEach(function (word) { var regex = new RegExp("\\b".concat(word, "\\b"), "gi"); var replacement = "\n <span style=\"\n display: inline-block;\n animation: popUpRedact 0.369s ease forwards;\n animation-delay: ".concat(redactDelay, ";\n background-color : ").concat(redactConfigurationSettings.background ? redactConfigurationSettings.background : redactColor, ";\n ", "color : ".concat(redactConfigurationSettings.color ? redactConfigurationSettings.color : redactColor, ";"), "\n padding-right : 0.169rem;\n padding-left : 0.169rem;\n margin-bottom : 0.269rem;\n \">\u2588\u2588\u2588\u2588\u2588\u2588\u2588</span>"); styledText = styledText.replace(regex, replacement); }); highlightWords.forEach(function (word) { var regex = new RegExp("(".concat(word, ")"), "gi"); styledText = styledText.replace(regex, "\n <mark style=\"\n display: inline-block;\n animation: popUpHighlight 0.369s ease forwards;\n animation-delay: ".concat(highlightDelay, ";\n ").concat(highlightConfigurationSettings.background ? "background: ".concat(highlightConfigurationSettings.background, ";") : "background-color: yellow;", "\n padding-right : 0.169rem;\n padding-left : 0.169rem;\n margin-bottom : 0.269rem;\n \">").concat(word, "</mark>")); }); for (var _i = 0, _Object$entries = Object.entries(textConfigurationSettings); _i < _Object$entries.length; _i++) { var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), target = _Object$entries$_i[0], style = _Object$entries$_i[1]; var regex = new RegExp("(".concat(target, ")"), 'gi'); styledText = styledText.replace(regex, "<span style=\"".concat(style, "\">$1</span>")); } return styledText; }; var limitLines = function limitLines(text, lineCount) { if (lineCount === Infinity) { return text; } var lines = text.split("\n").slice(0, lineCount); return lines.join("\n"); }; useEffect(function () { var splitTextIntoPages = function splitTextIntoPages(text, charsPerPage) { var regex = new RegExp("(.{1,".concat(charsPerPage, "})(\\s|$)"), 'g'); return text.match(regex) || [text]; }; var loadPDF = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(pdfFile) { var pdf, text; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: pdf = new jsPDF(); pdf.loadFile(pdfFile); text = pdf.getText(); return _context.abrupt("return", text); case 4: case "end": return _context.stop(); } }, _callee); })); return function loadPDF(_x) { return _ref.apply(this, arguments); }; }(); var loadDocFile = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(docFile) { var result; return _regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return mammoth.extractRawText({ arrayBuffer: docFile }); case 2: result = _context2.sent; return _context2.abrupt("return", result.value); case 4: case "end": return _context2.stop(); } }, _callee2); })); return function loadDocFile(_x2) { return _ref2.apply(this, arguments); }; }(); var parseDocument = /*#__PURE__*/function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() { var fullText, pages; return _regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: fullText = textFile || ''; if (!pdfFile) { _context3.next = 7; break; } _context3.next = 4; return loadPDF(pdfFile); case 4: fullText = _context3.sent; _context3.next = 11; break; case 7: if (!docFile) { _context3.next = 11; break; } _context3.next = 10; return loadDocFile(docFile); case 10: fullText = _context3.sent; case 11: pages = splitTextIntoPages(fullText, charsPerPage); setTextPages(pages); case 13: case "end": return _context3.stop(); } }, _callee3); })); return function parseDocument() { return _ref3.apply(this, arguments); }; }(); if (textFile || pdfFile || docFile) { parseDocument(); } else { setTextPages(initialTextPages); } }, [textFile, pdfFile, docFile, charsPerPage]); useEffect(function () { if (!scrollable) { var interval = setInterval(function () { setCurrentPage(function (prevPage) { return (prevPage + 1) % totalPages; }); }, pageSwitchInterval); return function () { return clearInterval(interval); }; } }, [totalPages, pageSwitchInterval, scrollable]); return /*#__PURE__*/React.createElement("div", _extends({ style: _objectSpread(_objectSpread({ position: "relative", overflow: scrollable ? "auto" : "hidden", msOverflowStyle: "none", scrollbarWidth: "none", borderRadius: "10px", height: scrollable ? "400px" : "300px" }, themeStyles[theme]), {}, { padding: scrollable ? "20px" : "0" }, previewContainerConfigurationSettings) }, previewContainerConfigurations), /*#__PURE__*/React.createElement("style", null, "\n @keyframes popUpHighlight {\n 0% { transform: scale(0.8); opacity: 0; }\n 50% { transform: scale(1.05); opacity: 1; }\n 100% { transform: scale(1); opacity: 1; }\n }\n \n @keyframes popUpRedact {\n 0% { transform: scale(0.8); opacity: 0; }\n 50% { transform: scale(1.05); opacity: 1; }\n 100% { transform: scale(1); opacity: 1; }\n }\n "), scrollable ? /*#__PURE__*/React.createElement("div", null, textPages.map(function (page, index) { return /*#__PURE__*/React.createElement("div", _extends({ key: index, style: _objectSpread({ boxSizing: "border-box", fontFamily: fontFamily, fontSize: fontSize, textAlign: textAlign, lineHeight: "1.6", textShadow: "1px 1px 3px rgba(0,0,0,0.3)", borderBottom: "2px solid rgba(255, 255, 255, 0.1)", padding: "20px", marginBottom: "20px" }, pageConfigurationSettings), dangerouslySetInnerHTML: { __html: applyCustomStyles(limitLines(page, lineCount)) } }, pageConfigurations)); })) : /*#__PURE__*/React.createElement(AnimatePresence, { initial: false }, textPages.map(function (page, index) { return index === currentPage && /*#__PURE__*/React.createElement(motion.div, _extends({ key: index, initial: { opacity: 0, y: 50 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -50 }, transition: { duration: 0.6, ease: "easeInOut" }, style: _objectSpread({ position: "absolute", boxSizing: "border-box", fontFamily: fontFamily, fontSize: fontSize, textAlign: textAlign, lineHeight: "1.6", textShadow: "1px 1px 3px rgba(0,0,0,0.3)", height: "100%", width: "100%", padding: "20px" }, pageConfigurationSettings), dangerouslySetInnerHTML: { __html: applyCustomStyles(limitLines(page, lineCount)) } }, pageConfigurations)); }))); } ; export default HUDTextPreview;