@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
JavaScript
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;