@react-pdf-viewer/search
Advanced tools
Comparing version 2.7.1 to 2.7.2
@@ -117,2 +117,4 @@ 'use strict'; | ||
var _e = React__namespace.useState(false), wholeWords = _e[0], setWholeWords = _e[1]; | ||
var defaultTargetPageFilter = function () { return true; }; | ||
var targetPageFilter = React__namespace.useCallback(function () { return store.get('targetPageFilter') || defaultTargetPageFilter; }, [store.get('targetPageFilter')]); | ||
var changeMatchCase = function (isChecked) { | ||
@@ -153,2 +155,5 @@ setMatchCase(isChecked); | ||
var setKeyword = function (keyword) { return setKeywords(keyword === '' ? [] : [keyword]); }; | ||
var setTargetPages = function (targetPageFilter) { | ||
store.update('targetPageFilter', targetPageFilter); | ||
}; | ||
var getTextContents = function () { | ||
@@ -201,2 +206,7 @@ var currentDoc = currentDocRef.current; | ||
var searchFor = function (keywordParam, matchCaseParam, wholeWordsParam) { | ||
var currentDoc = currentDocRef.current; | ||
if (!currentDoc) { | ||
return Promise.resolve([]); | ||
} | ||
var numPages = currentDoc.numPages; | ||
var keywords = keywordParam.map(function (k) { return normalizeSingleKeyword(k, matchCaseParam, wholeWordsParam); }); | ||
@@ -216,17 +226,19 @@ store.update('keyword', keywords); | ||
response.forEach(function (pageText, pageIndex) { | ||
keywords.forEach(function (keyword) { | ||
var matchIndex = 0; | ||
var matches; | ||
while ((matches = keyword.exec(pageText)) !== null) { | ||
arr.push({ | ||
keyword: keyword, | ||
matchIndex: matchIndex, | ||
pageIndex: pageIndex, | ||
pageText: pageText, | ||
startIndex: matches.index, | ||
endIndex: keyword.lastIndex, | ||
}); | ||
matchIndex++; | ||
} | ||
}); | ||
if (targetPageFilter()({ pageIndex: pageIndex, numPages: numPages })) { | ||
keywords.forEach(function (keyword) { | ||
var matchIndex = 0; | ||
var matches; | ||
while ((matches = keyword.exec(pageText)) !== null) { | ||
arr.push({ | ||
keyword: keyword, | ||
matchIndex: matchIndex, | ||
pageIndex: pageIndex, | ||
pageText: pageText, | ||
startIndex: matches.index, | ||
endIndex: keyword.lastIndex, | ||
}); | ||
matchIndex++; | ||
} | ||
}); | ||
} | ||
}); | ||
@@ -262,2 +274,3 @@ setFound(arr); | ||
setKeyword: setKeyword, | ||
setTargetPages: setTargetPages, | ||
}; | ||
@@ -281,3 +294,3 @@ }; | ||
var store = _a.store, onToggle = _a.onToggle; | ||
var l10n = React__namespace.useContext(core.LocalizationContext); | ||
var l10n = React__namespace.useContext(core.LocalizationContext).l10n; | ||
var _b = React__namespace.useState(false), isQuerying = _b[0], setIsQuerying = _b[1]; | ||
@@ -337,3 +350,3 @@ var _c = useSearch(store), clearKeyword = _c.clearKeyword, changeMatchCase = _c.changeMatchCase, changeWholeWords = _c.changeWholeWords, currentMatch = _c.currentMatch, jumpToNextMatch = _c.jumpToNextMatch, jumpToPreviousMatch = _c.jumpToPreviousMatch, keyword = _c.keyword, matchCase = _c.matchCase, numberOfMatches = _c.numberOfMatches, wholeWords = _c.wholeWords, search = _c.search, setKeyword = _c.setKeyword; | ||
var children = _a.children, onClick = _a.onClick; | ||
var l10n = React__namespace.useContext(core.LocalizationContext); | ||
var l10n = React__namespace.useContext(core.LocalizationContext).l10n; | ||
var label = (l10n && l10n.search ? l10n.search.search : 'Search'); | ||
@@ -403,3 +416,3 @@ var icon = React__namespace.createElement(SearchIcon, null); | ||
var Tracker = function (_a) { | ||
var pageIndex = _a.pageIndex, store = _a.store, onHighlightKeyword = _a.onHighlightKeyword; | ||
var numPages = _a.numPages, pageIndex = _a.pageIndex, store = _a.store, onHighlightKeyword = _a.onHighlightKeyword; | ||
var _b = React__namespace.useState({ | ||
@@ -417,2 +430,4 @@ matchIndex: -1, | ||
var characterIndexesRef = React__namespace.useRef([]); | ||
var defaultTargetPageFilter = function () { return true; }; | ||
var targetPageFilter = React__namespace.useCallback(function () { return store.get('targetPageFilter') || defaultTargetPageFilter; }, [store.get('targetPageFilter')]); | ||
var unhighlightAll = function (containerEle) { | ||
@@ -543,3 +558,6 @@ var highlightNodes = containerEle.querySelectorAll('span.rpv-search__highlight'); | ||
React__namespace.useEffect(function () { | ||
if (isEmptyKeyword() || !renderStatus.ele || renderStatus.status !== core.LayerRenderStatus.DidRender) { | ||
if (isEmptyKeyword() || | ||
!renderStatus.ele || | ||
renderStatus.status !== core.LayerRenderStatus.DidRender || | ||
!targetPageFilter()({ pageIndex: pageIndex, numPages: numPages })) { | ||
return; | ||
@@ -599,3 +617,3 @@ } | ||
}, []); | ||
var _a = useSearch(store), clearKeyword = _a.clearKeyword, jumpToMatch = _a.jumpToMatch, jumpToNextMatch = _a.jumpToNextMatch, jumpToPreviousMatch = _a.jumpToPreviousMatch, searchFor = _a.searchFor, setKeywords = _a.setKeywords; | ||
var _a = useSearch(store), clearKeyword = _a.clearKeyword, jumpToMatch = _a.jumpToMatch, jumpToNextMatch = _a.jumpToNextMatch, jumpToPreviousMatch = _a.jumpToPreviousMatch, searchFor = _a.searchFor, setKeywords = _a.setKeywords, setTargetPages = _a.setTargetPages; | ||
var SearchDecorator = function (props) { return React__namespace.createElement(Search, __assign({}, props, { store: store })); }; | ||
@@ -610,3 +628,3 @@ var ShowSearchPopoverDecorator = function (props) { return (React__namespace.createElement(ShowSearchPopover, __assign({}, props, { store: store }))); }; | ||
.fill(0) | ||
.map(function (_, index) { return (React__namespace.createElement(Tracker, { key: index, pageIndex: index, store: store, onHighlightKeyword: onHighlightKeyword })); }), | ||
.map(function (_, index) { return (React__namespace.createElement(Tracker, { key: index, numPages: renderViewerProps.doc.numPages, pageIndex: index, store: store, onHighlightKeyword: onHighlightKeyword })); }), | ||
currentSlot.subSlot.children)); | ||
@@ -657,2 +675,3 @@ } | ||
jumpToPreviousMatch: jumpToPreviousMatch, | ||
setTargetPages: setTargetPages, | ||
}; | ||
@@ -659,0 +678,0 @@ }; |
@@ -1,2 +0,2 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-pdf-viewer/core");function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var r=n(e),o=function(){return(o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)}; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-pdf-viewer/core");function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var r=n(e),a=function(){return(a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)}; | ||
/*! ***************************************************************************** | ||
@@ -15,2 +15,2 @@ Copyright (c) Microsoft Corporation. | ||
PERFORMANCE OF THIS SOFTWARE. | ||
***************************************************************************** */function a(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||t)}var c=new RegExp(" "),u=function(e){var t=e.wholeWords?" "+e.keyword+" ":e.keyword,n=e.matchCase?"g":"gi";return new RegExp(t,n)},i=function(e,t,n){return e instanceof RegExp?e:"string"==typeof e?""===e?c:u({keyword:e,matchCase:t||!1,wholeWords:n||!1}):(void 0!==t&&(e.matchCase=t),void 0!==n&&(e.wholeWords=n),u(e))},s=function(e){var t,n=function(e){var t=r.useRef(e.get("doc")),n=function(e){t.current=e};return r.useEffect((function(){return e.subscribe("doc",n),function(){e.unsubscribe("doc",n)}}),[]),t}(e),o=r.useState([]),a=o[0],u=o[1],s=r.useState([]),l=s[0],h=s[1],f=r.useState(0),d=f[0],p=f[1],m=r.useState(!1),g=m[0],v=m[1],x=r.useRef([]),y=r.useState(!1),E=y[0],w=y[1],b=function(e){if(0===a.length||0===l.length)return null;var t=Math.max(1,Math.min(l.length,e));return p(t),I(l[t-1])},C=function(e){return u(""===e?[]:[e])},I=function(t){var n=e.get("jumpToPage");return n&&n(t.pageIndex),e.update("matchPosition",{matchIndex:t.matchIndex,pageIndex:t.pageIndex}),t},S=function(t,r,o){var a=t.map((function(e){return i(e,r,o)}));return e.update("keyword",a),p(0),h([]),new Promise((function(e,t){(0===x.current.length?function(){var e=n.current;if(!e)return Promise.resolve([]);var t=Array(e.numPages).fill(0).map((function(t,n){return e.getPage(n+1).then((function(e){return e.getTextContent()})).then((function(e){var t=e.items.map((function(e){return e.str||""})).join("");return Promise.resolve({pageContent:t,pageIndex:n})}))}));return Promise.all(t).then((function(e){return e.sort((function(e,t){return e.pageIndex-t.pageIndex})),Promise.resolve(e.map((function(e){return e.pageContent})))}))}().then((function(e){return x.current=e,Promise.resolve(e)})):Promise.resolve(x.current)).then((function(t){var n=[];t.forEach((function(e,t){a.forEach((function(r){for(var o,a=0;null!==(o=r.exec(e));)n.push({keyword:r,matchIndex:a,pageIndex:t,pageText:e,startIndex:o.index,endIndex:r.lastIndex}),a++}))})),h(n),n.length>0&&(p(1),I(n[0])),e(n)}))}))};return r.useEffect((function(){x.current=[]}),[n.current]),{clearKeyword:function(){0!==a.length&&(e.update("keyword",[c]),C(""),p(0),h([]),v(!1),w(!1))},changeMatchCase:function(e){v(e),a.length>0&&S(a,e,E)},changeWholeWords:function(e){w(e),a.length>0&&S(a,g,e)},currentMatch:d,jumpToMatch:b,jumpToNextMatch:function(){return b(d+1)},jumpToPreviousMatch:function(){return b(d-1)},keywords:a,matchCase:g,numberOfMatches:l.length,wholeWords:E,search:function(){return S(a,g,E)},searchFor:S,setKeywords:u,keyword:0===a.length?"":(t=a[0],t instanceof RegExp?t.source:"string"==typeof t?t:t.keyword),setKeyword:C}},l=function(e){var t=e.children,n=e.store,r=s(n);return t(o({},r))},h=function(){return r.createElement(t.Icon,{size:16},r.createElement("path",{d:"M0.541,5.627L11.666,18.2c0.183,0.207,0.499,0.226,0.706,0.043c0.015-0.014,0.03-0.028,0.043-0.043\n L23.541,5.627"}))},f=function(){return r.createElement(t.Icon,{size:16},r.createElement("path",{d:"M23.535,18.373L12.409,5.8c-0.183-0.207-0.499-0.226-0.706-0.043C11.688,5.77,11.674,5.785,11.66,5.8\n L0.535,18.373"}))},d={left:0,top:8},p=function(e){var n=e.store,o=e.onToggle,a=r.useContext(t.LocalizationContext),c=r.useState(!1),u=c[0],i=c[1],l=s(n),p=l.clearKeyword,m=l.changeMatchCase,g=l.changeWholeWords,v=l.currentMatch,x=l.jumpToNextMatch,y=l.jumpToPreviousMatch,E=l.keyword,w=l.matchCase,b=l.numberOfMatches,C=l.wholeWords,I=l.search,S=l.setKeyword,k=a&&a.search?a.search.enterToSearch:"Enter to search",_=a&&a.search?a.search.previousMatch:"Previous match",P=a&&a.search?a.search.nextMatch:"Next match";return r.createElement("div",{className:"rpv-search__popover"},r.createElement("div",{className:"rpv-search__popover-input-counter"},r.createElement(t.TextBox,{ariaLabel:k,placeholder:k,type:"text",value:E,onChange:S,onKeyDown:function(e){"Enter"===e.key&&E&&(i(!0),I().then((function(e){return i(!1)})))}}),r.createElement("div",{className:"rpv-search__popover-counter"},u&&r.createElement(t.Spinner,{size:"1rem"}),!u&&r.createElement("span",null,v,"/",b))),r.createElement("label",{className:"rpv-search__popover-label"},r.createElement("input",{className:"rpv-search__popover-label-checkbox",checked:w,type:"checkbox",onChange:function(e){m(e.target.checked)}})," ",a&&a.search?a.search.matchCase:"Match case"),r.createElement("label",{className:"rpv-search__popover-label"},r.createElement("input",{className:"rpv-search__popover-label-checkbox",checked:C,type:"checkbox",onChange:function(e){g(e.target.checked)}})," ",a&&a.search?a.search.wholeWords:"Whole words"),r.createElement("div",{className:"rpv-search__popover-footer"},r.createElement("div",{className:"rpv-search__popover-footer-item"},r.createElement(t.Tooltip,{ariaControlsSuffix:"search-previous-match",position:t.Position.BottomCenter,target:r.createElement(t.MinimalButton,{ariaLabel:_,isDisabled:v<=1,onClick:y},r.createElement(f,null)),content:function(){return _},offset:d})),r.createElement("div",{className:"rpv-search__popover-footer-item"},r.createElement(t.Tooltip,{ariaControlsSuffix:"search-next-match",position:t.Position.BottomCenter,target:r.createElement(t.MinimalButton,{ariaLabel:P,isDisabled:v>b-1,onClick:x},r.createElement(h,null)),content:function(){return P},offset:d})),r.createElement("div",{className:"rpv-search__popover-footer-button"},r.createElement(t.Button,{onClick:function(){o(),p()}},a&&a.search?a.search.close:"Close"))))},m=function(){return r.createElement(t.Icon,{size:16},r.createElement("path",{d:"M10.5,0.5c5.523,0,10,4.477,10,10s-4.477,10-10,10s-10-4.477-10-10S4.977,0.5,10.5,0.5z\n M23.5,23.5\n l-5.929-5.929"}))},g=function(e){var n=e.children,o=e.onClick,a=r.useContext(t.LocalizationContext),c=a&&a.search?a.search.search:"Search";return n({icon:r.createElement(m,null),label:c,onClick:o})},v={left:0,top:8},x=function(e){var n=e.onClick;return r.createElement(g,{onClick:n},(function(e){return r.createElement(t.Tooltip,{ariaControlsSuffix:"search-popover",position:t.Position.BottomCenter,target:r.createElement(t.MinimalButton,{ariaLabel:e.label,onClick:n},e.icon),content:function(){return e.label},offset:v})}))},y={left:0,top:8},E=function(e){var n=e.children,a=e.store,c=n||function(e){return r.createElement(x,o({},e))};return r.createElement(t.Popover,{ariaControlsSuffix:"search",position:t.Position.BottomLeft,target:function(e){return c({onClick:e})},content:function(e){return r.createElement(p,{store:a,onToggle:e})},offset:y,closeOnClickOutside:!1,closeOnEscape:!0})},w=function(e){var t=e.parentNode;t&&t.removeChild(e)},b=function(e){var t=e.parentNode;if(t){var n=document.createRange();n.selectNodeContents(e),function(e,t){w(e);var n=t.parentNode;n&&n.insertBefore(e,t),w(t)}(n.extractContents(),e),t.normalize()}},C=function(e){var n=e.pageIndex,o=e.store,u=e.onHighlightKeyword,i=r.useState({matchIndex:-1,pageIndex:-1}),s=i[0],l=i[1],h=r.useState([c]),f=h[0],d=h[1],p=r.useState({pageIndex:n,scale:1,status:t.LayerRenderStatus.PreRender}),m=p[0],g=p[1],v=r.useRef(null),x=r.useRef([]),y=function(e){for(var t=e.querySelectorAll("span.rpv-search__highlight"),n=t.length,r=0;r<n;r++)t[r].parentElement.removeChild(t[r])},E=function(e){var t=x.current;if(0!==t.length){var n=[].slice.call(e.querySelectorAll(".rpv-core__text-layer-text")),r=t.map((function(e){return e.char})).join("");f.forEach((function(o){if(o.source.trim()){for(var c,i=-1===o.flags.indexOf("g")?new RegExp(o,o.flags+"g"):o,s=[];null!==(c=i.exec(r));)s.push({keyword:i,startIndex:c.index,endIndex:i.lastIndex});s.map((function(e){return{keyword:e.keyword,indexes:t.slice(e.startIndex,e.endIndex)}})).forEach((function(t){var r=t.indexes.reduce((function(e,t){return e[t.spanIndex]=a(a([],e[t.spanIndex]||[]),[t]),e}),{});Object.values(r).forEach((function(r){!function(e,t,n,r){var o=document.createRange(),a=n.firstChild;if(a){var c=r[0].charIndexInSpan,i=1===r.length?c:r[r.length-1].charIndexInSpan;o.setStart(a,c),o.setEnd(a,i+1);var s=document.createElement("span");o.surroundContents(s);var l=s.getBoundingClientRect(),h=t.getBoundingClientRect(),f=document.createElement("span");t.appendChild(f),f.style.left=100*(l.left-h.left)/h.width+"%",f.style.top=100*(l.top-h.top)/h.height+"%",f.style.width=100*l.width/h.width+"%",f.style.height=100*l.height/h.height+"%",f.classList.add("rpv-search__highlight"),f.setAttribute("title",e.source.trim()),b(s),u&&u({highlightEle:f,keyword:e})}}(t.keyword,e,n[r[0].spanIndex],r)}))}))}}))}},w=function(e){e&&e.length>0&&d(e)},C=function(e){return l(e)},I=function(e){if(e.has(n)){var t=e.get(n);t&&g({ele:t.ele,pageIndex:n,scale:t.scale,status:t.status})}},S=function(){return 0===f.length||1===f.length&&""===f[0].source.trim()};r.useEffect((function(){if(!S()&&m.status===t.LayerRenderStatus.DidRender&&!x.current.length){var e=m.ele,n=[].slice.call(e.querySelectorAll(".rpv-core__text-layer-text")).map((function(e){return e.textContent})).reduce((function(e,t,n){return e.concat(t.split("").map((function(e,t){return{char:e,charIndexInSpan:t,spanIndex:n}})))}),[{char:"",charIndexInSpan:0,spanIndex:0}]).slice(1);x.current=n}}),[f,m.status]),r.useEffect((function(){if(!S()&&m.ele&&m.status===t.LayerRenderStatus.DidRender){var e=m.ele;y(e),E(e),k()}}),[f,s,m.status,x.current]),r.useEffect((function(){S()&&m.ele&&m.status===t.LayerRenderStatus.DidRender&&y(m.ele)}),[f,m.status]);var k=function(){if(s.pageIndex===n&&m.ele&&m.status===t.LayerRenderStatus.DidRender){var e=m.ele,r=e.querySelectorAll(".rpv-search__highlight");if(s.matchIndex<r.length){var a=r[s.matchIndex],c=function(e,t){for(var n=e.offsetTop,r=e.offsetLeft,o=e.parentElement;o&&o!==t;)n+=o.offsetTop,r+=o.offsetLeft,o=o.parentElement;return{left:r,top:n}}(a,e),u=c.left,i=c.top,l=o.get("jumpToDestination");l&&(l(n,(e.getBoundingClientRect().height-i)/m.scale,u/m.scale,m.scale),v.current&&v.current.classList.remove("rpv-search__highlight--current"),v.current=a,a.classList.add("rpv-search__highlight--current"))}}};return r.useEffect((function(){return o.subscribe("keyword",w),o.subscribe("matchPosition",C),o.subscribe("renderStatus",I),function(){o.unsubscribe("keyword",w),o.unsubscribe("matchPosition",C),o.unsubscribe("renderStatus",I)}}),[]),r.createElement(r.Fragment,null)};exports.NextIcon=h,exports.PreviousIcon=f,exports.SearchIcon=m,exports.searchPlugin=function(e){var n=r.useMemo((function(){return e&&e.onHighlightKeyword?e.onHighlightKeyword:function(){}}),[]),a=r.useMemo((function(){return t.createStore({renderStatus:new Map})}),[]),u=s(a),h=u.clearKeyword,f=u.jumpToMatch,d=u.jumpToNextMatch,p=u.jumpToPreviousMatch,m=u.searchFor,g=u.setKeywords,v=function(e){return r.createElement(E,o({},e,{store:a}))};return{install:function(t){var n=e&&e.keyword?function(e){return Array.isArray(e)?e.map((function(e){return i(e)})):[i(e)]}(e.keyword):[c];a.update("jumpToDestination",t.jumpToDestination),a.update("jumpToPage",t.jumpToPage),a.update("keyword",n)},renderViewer:function(e){var t=e.slot;return t.subSlot&&(t.subSlot.children=r.createElement(r.Fragment,null,Array(e.doc.numPages).fill(0).map((function(e,t){return r.createElement(C,{key:t,pageIndex:t,store:a,onHighlightKeyword:n})})),t.subSlot.children)),t},uninstall:function(e){var t=a.get("renderStatus");t&&t.clear()},onDocumentLoad:function(e){a.update("doc",e.doc)},onTextLayerRender:function(e){var t=a.get("renderStatus");t&&(t=t.set(e.pageIndex,e),a.update("renderStatus",t))},Search:function(e){return r.createElement(l,o({},e,{store:a}))},ShowSearchPopover:v,ShowSearchPopoverButton:function(){return r.createElement(v,null,(function(e){return r.createElement(x,o({},e))}))},clearHighlights:function(){h()},highlight:function(e){var t=Array.isArray(e)?e:[e];return g(t),m(t)},jumpToMatch:f,jumpToNextMatch:d,jumpToPreviousMatch:p}}; | ||
***************************************************************************** */function o(e,t,n){if(n||2===arguments.length)for(var r,a=0,o=t.length;a<o;a++)!r&&a in t||(r||(r=Array.prototype.slice.call(t,0,a)),r[a]=t[a]);return e.concat(r||t)}var c=new RegExp(" "),u=function(e){var t=e.wholeWords?" "+e.keyword+" ":e.keyword,n=e.matchCase?"g":"gi";return new RegExp(t,n)},i=function(e,t,n){return e instanceof RegExp?e:"string"==typeof e?""===e?c:u({keyword:e,matchCase:t||!1,wholeWords:n||!1}):(void 0!==t&&(e.matchCase=t),void 0!==n&&(e.wholeWords=n),u(e))},s=function(e){var t,n=function(e){var t=r.useRef(e.get("doc")),n=function(e){t.current=e};return r.useEffect((function(){return e.subscribe("doc",n),function(){e.unsubscribe("doc",n)}}),[]),t}(e),a=r.useState([]),o=a[0],u=a[1],s=r.useState([]),l=s[0],h=s[1],f=r.useState(0),d=f[0],p=f[1],g=r.useState(!1),m=g[0],v=g[1],x=r.useRef([]),y=r.useState(!1),E=y[0],b=y[1],w=function(){return!0},C=r.useCallback((function(){return e.get("targetPageFilter")||w}),[e.get("targetPageFilter")]),P=function(e){if(0===o.length||0===l.length)return null;var t=Math.max(1,Math.min(l.length,e));return p(t),S(l[t-1])},I=function(e){return u(""===e?[]:[e])},S=function(t){var n=e.get("jumpToPage");return n&&n(t.pageIndex),e.update("matchPosition",{matchIndex:t.matchIndex,pageIndex:t.pageIndex}),t},k=function(t,r,a){var o=n.current;if(!o)return Promise.resolve([]);var c=o.numPages,u=t.map((function(e){return i(e,r,a)}));return e.update("keyword",u),p(0),h([]),new Promise((function(e,t){(0===x.current.length?function(){var e=n.current;if(!e)return Promise.resolve([]);var t=Array(e.numPages).fill(0).map((function(t,n){return e.getPage(n+1).then((function(e){return e.getTextContent()})).then((function(e){var t=e.items.map((function(e){return e.str||""})).join("");return Promise.resolve({pageContent:t,pageIndex:n})}))}));return Promise.all(t).then((function(e){return e.sort((function(e,t){return e.pageIndex-t.pageIndex})),Promise.resolve(e.map((function(e){return e.pageContent})))}))}().then((function(e){return x.current=e,Promise.resolve(e)})):Promise.resolve(x.current)).then((function(t){var n=[];t.forEach((function(e,t){C()({pageIndex:t,numPages:c})&&u.forEach((function(r){for(var a,o=0;null!==(a=r.exec(e));)n.push({keyword:r,matchIndex:o,pageIndex:t,pageText:e,startIndex:a.index,endIndex:r.lastIndex}),o++}))})),h(n),n.length>0&&(p(1),S(n[0])),e(n)}))}))};return r.useEffect((function(){x.current=[]}),[n.current]),{clearKeyword:function(){0!==o.length&&(e.update("keyword",[c]),I(""),p(0),h([]),v(!1),b(!1))},changeMatchCase:function(e){v(e),o.length>0&&k(o,e,E)},changeWholeWords:function(e){b(e),o.length>0&&k(o,m,e)},currentMatch:d,jumpToMatch:P,jumpToNextMatch:function(){return P(d+1)},jumpToPreviousMatch:function(){return P(d-1)},keywords:o,matchCase:m,numberOfMatches:l.length,wholeWords:E,search:function(){return k(o,m,E)},searchFor:k,setKeywords:u,keyword:0===o.length?"":(t=o[0],t instanceof RegExp?t.source:"string"==typeof t?t:t.keyword),setKeyword:I,setTargetPages:function(t){e.update("targetPageFilter",t)}}},l=function(e){var t=e.children,n=e.store,r=s(n);return t(a({},r))},h=function(){return r.createElement(t.Icon,{size:16},r.createElement("path",{d:"M0.541,5.627L11.666,18.2c0.183,0.207,0.499,0.226,0.706,0.043c0.015-0.014,0.03-0.028,0.043-0.043\n L23.541,5.627"}))},f=function(){return r.createElement(t.Icon,{size:16},r.createElement("path",{d:"M23.535,18.373L12.409,5.8c-0.183-0.207-0.499-0.226-0.706-0.043C11.688,5.77,11.674,5.785,11.66,5.8\n L0.535,18.373"}))},d={left:0,top:8},p=function(e){var n=e.store,a=e.onToggle,o=r.useContext(t.LocalizationContext).l10n,c=r.useState(!1),u=c[0],i=c[1],l=s(n),p=l.clearKeyword,g=l.changeMatchCase,m=l.changeWholeWords,v=l.currentMatch,x=l.jumpToNextMatch,y=l.jumpToPreviousMatch,E=l.keyword,b=l.matchCase,w=l.numberOfMatches,C=l.wholeWords,P=l.search,I=l.setKeyword,S=o&&o.search?o.search.enterToSearch:"Enter to search",k=o&&o.search?o.search.previousMatch:"Previous match",_=o&&o.search?o.search.nextMatch:"Next match";return r.createElement("div",{className:"rpv-search__popover"},r.createElement("div",{className:"rpv-search__popover-input-counter"},r.createElement(t.TextBox,{ariaLabel:S,placeholder:S,type:"text",value:E,onChange:I,onKeyDown:function(e){"Enter"===e.key&&E&&(i(!0),P().then((function(e){return i(!1)})))}}),r.createElement("div",{className:"rpv-search__popover-counter"},u&&r.createElement(t.Spinner,{size:"1rem"}),!u&&r.createElement("span",null,v,"/",w))),r.createElement("label",{className:"rpv-search__popover-label"},r.createElement("input",{className:"rpv-search__popover-label-checkbox",checked:b,type:"checkbox",onChange:function(e){g(e.target.checked)}})," ",o&&o.search?o.search.matchCase:"Match case"),r.createElement("label",{className:"rpv-search__popover-label"},r.createElement("input",{className:"rpv-search__popover-label-checkbox",checked:C,type:"checkbox",onChange:function(e){m(e.target.checked)}})," ",o&&o.search?o.search.wholeWords:"Whole words"),r.createElement("div",{className:"rpv-search__popover-footer"},r.createElement("div",{className:"rpv-search__popover-footer-item"},r.createElement(t.Tooltip,{ariaControlsSuffix:"search-previous-match",position:t.Position.BottomCenter,target:r.createElement(t.MinimalButton,{ariaLabel:k,isDisabled:v<=1,onClick:y},r.createElement(f,null)),content:function(){return k},offset:d})),r.createElement("div",{className:"rpv-search__popover-footer-item"},r.createElement(t.Tooltip,{ariaControlsSuffix:"search-next-match",position:t.Position.BottomCenter,target:r.createElement(t.MinimalButton,{ariaLabel:_,isDisabled:v>w-1,onClick:x},r.createElement(h,null)),content:function(){return _},offset:d})),r.createElement("div",{className:"rpv-search__popover-footer-button"},r.createElement(t.Button,{onClick:function(){a(),p()}},o&&o.search?o.search.close:"Close"))))},g=function(){return r.createElement(t.Icon,{size:16},r.createElement("path",{d:"M10.5,0.5c5.523,0,10,4.477,10,10s-4.477,10-10,10s-10-4.477-10-10S4.977,0.5,10.5,0.5z\n M23.5,23.5\n l-5.929-5.929"}))},m=function(e){var n=e.children,a=e.onClick,o=r.useContext(t.LocalizationContext).l10n,c=o&&o.search?o.search.search:"Search";return n({icon:r.createElement(g,null),label:c,onClick:a})},v={left:0,top:8},x=function(e){var n=e.onClick;return r.createElement(m,{onClick:n},(function(e){return r.createElement(t.Tooltip,{ariaControlsSuffix:"search-popover",position:t.Position.BottomCenter,target:r.createElement(t.MinimalButton,{ariaLabel:e.label,onClick:n},e.icon),content:function(){return e.label},offset:v})}))},y={left:0,top:8},E=function(e){var n=e.children,o=e.store,c=n||function(e){return r.createElement(x,a({},e))};return r.createElement(t.Popover,{ariaControlsSuffix:"search",position:t.Position.BottomLeft,target:function(e){return c({onClick:e})},content:function(e){return r.createElement(p,{store:o,onToggle:e})},offset:y,closeOnClickOutside:!1,closeOnEscape:!0})},b=function(e){var t=e.parentNode;t&&t.removeChild(e)},w=function(e){var t=e.parentNode;if(t){var n=document.createRange();n.selectNodeContents(e),function(e,t){b(e);var n=t.parentNode;n&&n.insertBefore(e,t),b(t)}(n.extractContents(),e),t.normalize()}},C=function(e){var n=e.numPages,a=e.pageIndex,u=e.store,i=e.onHighlightKeyword,s=r.useState({matchIndex:-1,pageIndex:-1}),l=s[0],h=s[1],f=r.useState([c]),d=f[0],p=f[1],g=r.useState({pageIndex:a,scale:1,status:t.LayerRenderStatus.PreRender}),m=g[0],v=g[1],x=r.useRef(null),y=r.useRef([]),E=function(){return!0},b=r.useCallback((function(){return u.get("targetPageFilter")||E}),[u.get("targetPageFilter")]),C=function(e){for(var t=e.querySelectorAll("span.rpv-search__highlight"),n=t.length,r=0;r<n;r++)t[r].parentElement.removeChild(t[r])},P=function(e){var t=y.current;if(0!==t.length){var n=[].slice.call(e.querySelectorAll(".rpv-core__text-layer-text")),r=t.map((function(e){return e.char})).join("");d.forEach((function(a){if(a.source.trim()){for(var c,u=-1===a.flags.indexOf("g")?new RegExp(a,a.flags+"g"):a,s=[];null!==(c=u.exec(r));)s.push({keyword:u,startIndex:c.index,endIndex:u.lastIndex});s.map((function(e){return{keyword:e.keyword,indexes:t.slice(e.startIndex,e.endIndex)}})).forEach((function(t){var r=t.indexes.reduce((function(e,t){return e[t.spanIndex]=o(o([],e[t.spanIndex]||[]),[t]),e}),{});Object.values(r).forEach((function(r){!function(e,t,n,r){var a=document.createRange(),o=n.firstChild;if(o){var c=r[0].charIndexInSpan,u=1===r.length?c:r[r.length-1].charIndexInSpan;a.setStart(o,c),a.setEnd(o,u+1);var s=document.createElement("span");a.surroundContents(s);var l=s.getBoundingClientRect(),h=t.getBoundingClientRect(),f=document.createElement("span");t.appendChild(f),f.style.left=100*(l.left-h.left)/h.width+"%",f.style.top=100*(l.top-h.top)/h.height+"%",f.style.width=100*l.width/h.width+"%",f.style.height=100*l.height/h.height+"%",f.classList.add("rpv-search__highlight"),f.setAttribute("title",e.source.trim()),w(s),i&&i({highlightEle:f,keyword:e})}}(t.keyword,e,n[r[0].spanIndex],r)}))}))}}))}},I=function(e){e&&e.length>0&&p(e)},S=function(e){return h(e)},k=function(e){if(e.has(a)){var t=e.get(a);t&&v({ele:t.ele,pageIndex:a,scale:t.scale,status:t.status})}},_=function(){return 0===d.length||1===d.length&&""===d[0].source.trim()};r.useEffect((function(){if(!_()&&m.status===t.LayerRenderStatus.DidRender&&!y.current.length){var e=m.ele,n=[].slice.call(e.querySelectorAll(".rpv-core__text-layer-text")).map((function(e){return e.textContent})).reduce((function(e,t,n){return e.concat(t.split("").map((function(e,t){return{char:e,charIndexInSpan:t,spanIndex:n}})))}),[{char:"",charIndexInSpan:0,spanIndex:0}]).slice(1);y.current=n}}),[d,m.status]),r.useEffect((function(){if(!_()&&m.ele&&m.status===t.LayerRenderStatus.DidRender&&b()({pageIndex:a,numPages:n})){var e=m.ele;C(e),P(e),M()}}),[d,l,m.status,y.current]),r.useEffect((function(){_()&&m.ele&&m.status===t.LayerRenderStatus.DidRender&&C(m.ele)}),[d,m.status]);var M=function(){if(l.pageIndex===a&&m.ele&&m.status===t.LayerRenderStatus.DidRender){var e=m.ele,n=e.querySelectorAll(".rpv-search__highlight");if(l.matchIndex<n.length){var r=n[l.matchIndex],o=function(e,t){for(var n=e.offsetTop,r=e.offsetLeft,a=e.parentElement;a&&a!==t;)n+=a.offsetTop,r+=a.offsetLeft,a=a.parentElement;return{left:r,top:n}}(r,e),c=o.left,i=o.top,s=u.get("jumpToDestination");s&&(s(a,(e.getBoundingClientRect().height-i)/m.scale,c/m.scale,m.scale),x.current&&x.current.classList.remove("rpv-search__highlight--current"),x.current=r,r.classList.add("rpv-search__highlight--current"))}}};return r.useEffect((function(){return u.subscribe("keyword",I),u.subscribe("matchPosition",S),u.subscribe("renderStatus",k),function(){u.unsubscribe("keyword",I),u.unsubscribe("matchPosition",S),u.unsubscribe("renderStatus",k)}}),[]),r.createElement(r.Fragment,null)};exports.NextIcon=h,exports.PreviousIcon=f,exports.SearchIcon=g,exports.searchPlugin=function(e){var n=r.useMemo((function(){return e&&e.onHighlightKeyword?e.onHighlightKeyword:function(){}}),[]),o=r.useMemo((function(){return t.createStore({renderStatus:new Map})}),[]),u=s(o),h=u.clearKeyword,f=u.jumpToMatch,d=u.jumpToNextMatch,p=u.jumpToPreviousMatch,g=u.searchFor,m=u.setKeywords,v=u.setTargetPages,y=function(e){return r.createElement(E,a({},e,{store:o}))};return{install:function(t){var n=e&&e.keyword?function(e){return Array.isArray(e)?e.map((function(e){return i(e)})):[i(e)]}(e.keyword):[c];o.update("jumpToDestination",t.jumpToDestination),o.update("jumpToPage",t.jumpToPage),o.update("keyword",n)},renderViewer:function(e){var t=e.slot;return t.subSlot&&(t.subSlot.children=r.createElement(r.Fragment,null,Array(e.doc.numPages).fill(0).map((function(t,a){return r.createElement(C,{key:a,numPages:e.doc.numPages,pageIndex:a,store:o,onHighlightKeyword:n})})),t.subSlot.children)),t},uninstall:function(e){var t=o.get("renderStatus");t&&t.clear()},onDocumentLoad:function(e){o.update("doc",e.doc)},onTextLayerRender:function(e){var t=o.get("renderStatus");t&&(t=t.set(e.pageIndex,e),o.update("renderStatus",t))},Search:function(e){return r.createElement(l,a({},e,{store:o}))},ShowSearchPopover:y,ShowSearchPopoverButton:function(){return r.createElement(y,null,(function(e){return r.createElement(x,a({},e))}))},clearHighlights:function(){h()},highlight:function(e){var t=Array.isArray(e)?e:[e];return m(t),g(t)},jumpToMatch:f,jumpToNextMatch:d,jumpToPreviousMatch:p,setTargetPages:v}}; |
@@ -49,2 +49,8 @@ /** | ||
export interface SearchTargetPage { | ||
numPages: number; | ||
pageIndex: number; | ||
} | ||
export type SearchTargetPageFilter = (targetPage: SearchTargetPage) => boolean; | ||
export interface RenderSearchProps { | ||
@@ -64,2 +70,3 @@ clearKeyword(): void; | ||
setKeyword(keyword: string): void; | ||
setTargetPages(targetPageFilter: SearchTargetPageFilter): void; | ||
} | ||
@@ -85,2 +92,3 @@ | ||
jumpToPreviousMatch(): Match | null; | ||
setTargetPages(targetPageFilter: SearchTargetPageFilter): void; | ||
} | ||
@@ -87,0 +95,0 @@ |
{ | ||
"name": "@react-pdf-viewer/search", | ||
"version": "2.7.1", | ||
"version": "2.7.2", | ||
"description": "A React component to view a PDF document", | ||
@@ -36,3 +36,3 @@ "license": "https://react-pdf-viewer.dev/license", | ||
"dependencies": { | ||
"@react-pdf-viewer/core": "2.7.1" | ||
"@react-pdf-viewer/core": "2.7.2" | ||
}, | ||
@@ -53,3 +53,3 @@ "peerDependencies": { | ||
}, | ||
"gitHead": "e7e1a5a6c3c2706198c71b57fff3cff285c5fe54" | ||
"gitHead": "d5084b21f1e89e11ee45764849b8c61e4e6f4216" | ||
} |
51000
813
+ Added@react-pdf-viewer/core@2.7.2(transitive)
- Removed@react-pdf-viewer/core@2.7.1(transitive)
Updated@react-pdf-viewer/core@2.7.2