pict-docuserve 1.4.9 → 1.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pict-docuserve.js
CHANGED
|
@@ -5499,7 +5499,7 @@ tmpLoadedViews.sort((a,b)=>{return this.pict.views[a].options.AutoRenderOrdinal-
|
|
|
5499
5499
|
// future SVG-baking diagram engine) into the theme lifecycle.
|
|
5500
5500
|
// Exposes the same functions as the standalone require, plus
|
|
5501
5501
|
// `adaptMermaid(mermaid, options)` bound to this provider.
|
|
5502
|
-
let tmpSelf=this;this.diagram={MERMAID_TOKEN_MAP:libDiagramAdapter.MERMAID_TOKEN_MAP,readCSSVar:libDiagramAdapter.readCSSVar,getMermaidTokenMap:libDiagramAdapter.getMermaidTokenMap,buildMermaidThemeVariables:libDiagramAdapter.buildMermaidThemeVariables,initializeMermaid:libDiagramAdapter.initializeMermaid,stashMermaidSource:libDiagramAdapter.stashMermaidSource,refreshMermaidDiagrams:libDiagramAdapter.refreshMermaidDiagrams,adaptMermaid:function adaptMermaid(pMermaid,pOptions){return libDiagramAdapter.adaptMermaid(tmpSelf,pMermaid,pOptions);}};// Auto-register the four theme template expressions if the host pict
|
|
5502
|
+
let tmpSelf=this;this.diagram={MERMAID_TOKEN_MAP:libDiagramAdapter.MERMAID_TOKEN_MAP,readCSSVar:libDiagramAdapter.readCSSVar,getMermaidTokenMap:libDiagramAdapter.getMermaidTokenMap,buildMermaidThemeVariables:libDiagramAdapter.buildMermaidThemeVariables,initializeMermaid:libDiagramAdapter.initializeMermaid,stashMermaidSource:libDiagramAdapter.stashMermaidSource,refreshMermaidDiagrams:libDiagramAdapter.refreshMermaidDiagrams,stripMermaidStyleImportance:libDiagramAdapter.stripMermaidStyleImportance,adaptMermaid:function adaptMermaid(pMermaid,pOptions){return libDiagramAdapter.adaptMermaid(tmpSelf,pMermaid,pOptions);}};// Auto-register the four theme template expressions if the host pict
|
|
5503
5503
|
// supports addTemplate. In bare-fable/test contexts this is skipped.
|
|
5504
5504
|
if(this.pict&&typeof this.pict.addTemplate==='function'){try{this.pict.addTemplate(require('./templates/Pict-Template-Theme.js'));this.pict.addTemplate(require('./templates/Pict-Template-ThemeVar.js'));this.pict.addTemplate(require('./templates/Pict-Template-ThemeAsset.js'));this.pict.addTemplate(require('./templates/Pict-Template-ThemeImage.js'));}catch(pError){if(this.log)this.log.warn('PictProviderTheme: template registration skipped: '+pError.message);}}}// ================================================================
|
|
5505
5505
|
// Theme registration
|
|
@@ -5762,9 +5762,44 @@ return MERMAID_TOKEN_MAP.map(tmpEntry=>({Key:tmpEntry.Key,Var:tmpEntry.Var,Fallb
|
|
|
5762
5762
|
* - Element: scoped root to search inside
|
|
5763
5763
|
* - omitted: whole document
|
|
5764
5764
|
* @returns {Promise|null} the mermaid.run() promise, or null if no work
|
|
5765
|
-
*/function refreshMermaidDiagrams(pSelectorOrRoot){if(typeof document==='undefined'){return null;}let tmpMermaid=typeof mermaid!=='undefined'?mermaid:null;if(!tmpMermaid||typeof tmpMermaid.run!=='function'){return null;}let tmpRendered=_resolveMermaidNodes(pSelectorOrRoot);if(!tmpRendered||tmpRendered.length<1){return null;}for(let i=0;i<tmpRendered.length;i++){let tmpEl=tmpRendered[i];let tmpSrc=tmpEl.getAttribute('data-mermaid-source');if(tmpSrc!==null){tmpEl.textContent=tmpSrc;}tmpEl.removeAttribute('data-processed');if(tmpEl.classList&&typeof tmpEl.classList.remove==='function'){tmpEl.classList.remove('mermaid-rendered');}}try{
|
|
5765
|
+
*/function refreshMermaidDiagrams(pSelectorOrRoot){if(typeof document==='undefined'){return null;}let tmpMermaid=typeof mermaid!=='undefined'?mermaid:null;if(!tmpMermaid||typeof tmpMermaid.run!=='function'){return null;}let tmpRendered=_resolveMermaidNodes(pSelectorOrRoot);if(!tmpRendered||tmpRendered.length<1){return null;}for(let i=0;i<tmpRendered.length;i++){let tmpEl=tmpRendered[i];let tmpSrc=tmpEl.getAttribute('data-mermaid-source');if(tmpSrc!==null){tmpEl.textContent=tmpSrc;}tmpEl.removeAttribute('data-processed');if(tmpEl.classList&&typeof tmpEl.classList.remove==='function'){tmpEl.classList.remove('mermaid-rendered');}}try{let tmpResult=tmpMermaid.run({nodes:tmpRendered});// After mermaid finishes drawing, strip the !important flags it
|
|
5766
|
+
// bakes into per-node inline fill/stroke styles. See
|
|
5767
|
+
// stripMermaidStyleImportance() docs for the why.
|
|
5768
|
+
if(tmpResult&&typeof tmpResult.then==='function'){return tmpResult.then(function(){stripMermaidStyleImportance(tmpRendered);return tmpResult;});}// Synchronous fallback (older mermaid versions).
|
|
5769
|
+
stripMermaidStyleImportance(tmpRendered);return tmpResult;}catch(pError){// Surface to the caller; they're already wrapping in try/catch in
|
|
5766
5770
|
// most cases. Return a rejected promise so .catch() consumers fire.
|
|
5767
|
-
return Promise.reject(pError);}}
|
|
5771
|
+
return Promise.reject(pError);}}/**
|
|
5772
|
+
* Mermaid 11's flowchart `style X fill:#...` directive emits the fill
|
|
5773
|
+
* and stroke inline with `!important`:
|
|
5774
|
+
*
|
|
5775
|
+
* <rect class="basic label-container"
|
|
5776
|
+
* style="fill:#e8f5e9 !important;stroke:#43a047 !important"/>
|
|
5777
|
+
*
|
|
5778
|
+
* Inline `!important` beats external `!important` via specificity, so
|
|
5779
|
+
* any theme-aware CSS we write (e.g. `.theme-dark ... { fill: theme-bg
|
|
5780
|
+
* !important }`) silently loses no matter how strong its selector.
|
|
5781
|
+
* Diagrams keep their Material pastels even in dark themes — light
|
|
5782
|
+
* fills with light text = unreadable.
|
|
5783
|
+
*
|
|
5784
|
+
* Strip just the `!important` flag off mermaid-emitted inline styles
|
|
5785
|
+
* after every render. The fill/stroke values themselves stay intact,
|
|
5786
|
+
* so light mode keeps the author-intended palette; in dark mode the
|
|
5787
|
+
* external `.theme-dark` CSS now reaches the rect and recolors to a
|
|
5788
|
+
* theme-aware background.
|
|
5789
|
+
*
|
|
5790
|
+
* Must run after every mermaid render — initial + every re-render
|
|
5791
|
+
* triggered by a theme change. `refreshMermaidDiagrams` calls it on
|
|
5792
|
+
* re-renders; the initial render in pict-section-content's view calls
|
|
5793
|
+
* it via the provider's `diagram.stripMermaidStyleImportance` handle.
|
|
5794
|
+
*
|
|
5795
|
+
* @param {string|Element|NodeList|Array} [pTarget]
|
|
5796
|
+
* - omitted: scan the whole document
|
|
5797
|
+
* - string: querySelector scope (e.g. '#Pict-Content-Body')
|
|
5798
|
+
* - Element: scan within this element
|
|
5799
|
+
* - NodeList/Array of `pre.mermaid` elements: scan within each
|
|
5800
|
+
* @returns {number} count of shapes that had !important stripped
|
|
5801
|
+
*/function stripMermaidStyleImportance(pTarget){if(typeof document==='undefined'){return 0;}let tmpMermaids;if(!pTarget){tmpMermaids=document.querySelectorAll('pre.mermaid');}else if(typeof pTarget==='string'){let tmpScope=document.querySelector(pTarget);tmpMermaids=tmpScope?tmpScope.querySelectorAll('pre.mermaid'):[];}else if(pTarget.length!==undefined){// NodeList or Array of pre.mermaid elements
|
|
5802
|
+
tmpMermaids=pTarget;}else if(pTarget.querySelectorAll){tmpMermaids=pTarget.querySelectorAll('pre.mermaid');}else{return 0;}let tmpStripped=0;for(let i=0;i<tmpMermaids.length;i++){let tmpMerm=tmpMermaids[i];if(!tmpMerm||!tmpMerm.querySelectorAll){continue;}let tmpShapes=tmpMerm.querySelectorAll('.node rect[style*="!important"], '+'.node polygon[style*="!important"], '+'.node circle[style*="!important"], '+'.node ellipse[style*="!important"], '+'.node path[style*="!important"], '+'.cluster rect[style*="!important"]');for(let j=0;j<tmpShapes.length;j++){let tmpEl=tmpShapes[j];let tmpStyle=tmpEl.getAttribute('style')||'';if(tmpStyle.indexOf('!important')<0){continue;}tmpEl.setAttribute('style',tmpStyle.replace(/\s*!important\s*/gi,''));tmpStripped++;}}return tmpStripped;}function _resolveMermaidNodes(pSelectorOrRoot){let tmpSelector='pre.mermaid[data-mermaid-source]';if(!pSelectorOrRoot){return document.querySelectorAll(tmpSelector);}if(typeof pSelectorOrRoot==='string'){// Treat the string as a scope selector; collect mermaid nodes inside it.
|
|
5768
5803
|
let tmpScope=document.querySelector(pSelectorOrRoot);if(!tmpScope){return[];}return tmpScope.querySelectorAll(tmpSelector);}if(pSelectorOrRoot.querySelectorAll){return pSelectorOrRoot.querySelectorAll(tmpSelector);}return[];}/**
|
|
5769
5804
|
* One-shot: initialize mermaid against the active theme, subscribe to
|
|
5770
5805
|
* theme apply events, and return a handle the caller can use for
|
|
@@ -5787,7 +5822,7 @@ let tmpScope=document.querySelector(pSelectorOrRoot);if(!tmpScope){return[];}ret
|
|
|
5787
5822
|
* @returns {{ dispose: function, refresh: function, reinitialize: function, subscribed: boolean }}
|
|
5788
5823
|
*/function adaptMermaid(pProvider,pMermaid,pOptions){let tmpOptions=pOptions||{};let tmpInitOverrides={themeVariables:tmpOptions.themeOverrides,config:tmpOptions.configOverrides};// Always initialize, even if no provider — the static base theme should
|
|
5789
5824
|
// still pick up whatever CSS variables the page does have.
|
|
5790
|
-
initializeMermaid(pMermaid,tmpInitOverrides);let tmpRefresh=function tmpRefresh(pContext){if(typeof tmpOptions.onBeforeRefresh==='function'){try{tmpOptions.onBeforeRefresh(pContext||{});}catch(e){/* swallow; refresh must not be gated on listener errors */}}initializeMermaid(pMermaid,tmpInitOverrides);let tmpResult=refreshMermaidDiagrams(tmpOptions.refreshScope);if(tmpResult&&typeof tmpResult.then==='function'&&typeof tmpOptions.onAfterRefresh==='function'){tmpResult.then(()=>{try{tmpOptions.onAfterRefresh(pContext||{});}catch(e){/* swallow */}},()=>{/* error path: onAfterRefresh still fires so the UI can drop spinners */try{tmpOptions.onAfterRefresh(pContext||{});}catch(e){/* swallow */}});}return tmpResult;};let tmpDispose=function tmpDispose(){};let tmpSubscribed=false;if(pProvider&&typeof pProvider.onApply==='function'){tmpDispose=pProvider.onApply(function(pBundle,pContext){tmpRefresh(pContext||{});});tmpSubscribed=true;}return{dispose:function dispose(){if(typeof tmpDispose==='function'){tmpDispose();}},refresh:tmpRefresh,reinitialize:function reinitialize(){initializeMermaid(pMermaid,tmpInitOverrides);},subscribed:tmpSubscribed};}module.exports={MERMAID_TOKEN_MAP:MERMAID_TOKEN_MAP,readCSSVar:readCSSVar,getMermaidTokenMap:getMermaidTokenMap,buildMermaidThemeVariables:buildMermaidThemeVariables,initializeMermaid:initializeMermaid,stashMermaidSource:stashMermaidSource,refreshMermaidDiagrams:refreshMermaidDiagrams,adaptMermaid:adaptMermaid};},{}],144:[function(require,module,exports){/**
|
|
5825
|
+
initializeMermaid(pMermaid,tmpInitOverrides);let tmpRefresh=function tmpRefresh(pContext){if(typeof tmpOptions.onBeforeRefresh==='function'){try{tmpOptions.onBeforeRefresh(pContext||{});}catch(e){/* swallow; refresh must not be gated on listener errors */}}initializeMermaid(pMermaid,tmpInitOverrides);let tmpResult=refreshMermaidDiagrams(tmpOptions.refreshScope);if(tmpResult&&typeof tmpResult.then==='function'&&typeof tmpOptions.onAfterRefresh==='function'){tmpResult.then(()=>{try{tmpOptions.onAfterRefresh(pContext||{});}catch(e){/* swallow */}},()=>{/* error path: onAfterRefresh still fires so the UI can drop spinners */try{tmpOptions.onAfterRefresh(pContext||{});}catch(e){/* swallow */}});}return tmpResult;};let tmpDispose=function tmpDispose(){};let tmpSubscribed=false;if(pProvider&&typeof pProvider.onApply==='function'){tmpDispose=pProvider.onApply(function(pBundle,pContext){tmpRefresh(pContext||{});});tmpSubscribed=true;}return{dispose:function dispose(){if(typeof tmpDispose==='function'){tmpDispose();}},refresh:tmpRefresh,reinitialize:function reinitialize(){initializeMermaid(pMermaid,tmpInitOverrides);},subscribed:tmpSubscribed};}module.exports={MERMAID_TOKEN_MAP:MERMAID_TOKEN_MAP,readCSSVar:readCSSVar,getMermaidTokenMap:getMermaidTokenMap,buildMermaidThemeVariables:buildMermaidThemeVariables,initializeMermaid:initializeMermaid,stashMermaidSource:stashMermaidSource,refreshMermaidDiagrams:refreshMermaidDiagrams,stripMermaidStyleImportance:stripMermaidStyleImportance,adaptMermaid:adaptMermaid};},{}],144:[function(require,module,exports){/**
|
|
5791
5826
|
* Pict template expression: {~Theme:Path~}
|
|
5792
5827
|
*
|
|
5793
5828
|
* Resolves a token path against the active theme bundle and returns the
|
|
@@ -6372,8 +6407,15 @@ this._ensureMermaidAdapter();// Cache each diagram's source on the element so th
|
|
|
6372
6407
|
let tmpProviderForStash=this.pict&&this.pict.providers&&this.pict.providers.Theme;if(tmpProviderForStash&&tmpProviderForStash.diagram&&typeof tmpProviderForStash.diagram.stashMermaidSource==='function'){tmpProviderForStash.diagram.stashMermaidSource(tmpMermaidElements);}else{for(let i=0;i<tmpMermaidElements.length;i++){let tmpEl=tmpMermaidElements[i];if(!tmpEl.hasAttribute('data-mermaid-source')){tmpEl.setAttribute('data-mermaid-source',tmpEl.textContent);}}}// mermaid.run() will process all pre.mermaid elements in the container.
|
|
6373
6408
|
// It returns a promise; once it resolves the inner SVG exists and we
|
|
6374
6409
|
// can tag the diagrams as fullscreen-clickable.
|
|
6375
|
-
try{let tmpResult=mermaid.run({nodes:tmpMermaidElements});if(tmpResult&&typeof tmpResult.then==='function'){tmpResult.then(()=>{
|
|
6376
|
-
|
|
6410
|
+
try{let tmpResult=mermaid.run({nodes:tmpMermaidElements});if(tmpResult&&typeof tmpResult.then==='function'){tmpResult.then(()=>{// Strip mermaid 11's inline !important fill/stroke flags
|
|
6411
|
+
// so the view's theme-aware .theme-dark CSS rules can win
|
|
6412
|
+
// against the per-node colors mermaid bakes inline. The
|
|
6413
|
+
// adapter strips on every re-render; the initial render
|
|
6414
|
+
// runs through mermaid.run() directly so we have to call
|
|
6415
|
+
// the strip here too. Without this the dark-mode rect
|
|
6416
|
+
// fill override silently loses to inline `!important`.
|
|
6417
|
+
let tmpProvider=this.pict&&this.pict.providers&&this.pict.providers.Theme;if(tmpProvider&&tmpProvider.diagram&&typeof tmpProvider.diagram.stripMermaidStyleImportance==='function'){tmpProvider.diagram.stripMermaidStyleImportance(tmpMermaidElements);}this.enableFullscreenViewers(tmpContainerID,{onlyMermaid:true});}).catch(pError=>{this.log.error('Mermaid rendering error: '+(pError&&pError.message?pError.message:pError));});}else{// Synchronous fallback (older mermaid)
|
|
6418
|
+
let tmpProvider=this.pict&&this.pict.providers&&this.pict.providers.Theme;if(tmpProvider&&tmpProvider.diagram&&typeof tmpProvider.diagram.stripMermaidStyleImportance==='function'){tmpProvider.diagram.stripMermaidStyleImportance(tmpMermaidElements);}this.enableFullscreenViewers(tmpContainerID,{onlyMermaid:true});}}catch(pError){this.log.error('Mermaid rendering error: '+pError.message);}}/**
|
|
6377
6419
|
* Render KaTeX inline and display math elements in the content area.
|
|
6378
6420
|
* Inline: `<span class="pict-content-katex-inline">`
|
|
6379
6421
|
* Display: `<div class="pict-content-katex-display">`
|
|
@@ -12883,7 +12925,7 @@ try{if(!global.localStorage)return false;}catch(_){return false;}var val=global.
|
|
|
12883
12925
|
// presumably different callback function.
|
|
12884
12926
|
// This makes sure that own properties are retained, so that
|
|
12885
12927
|
// decorations and such are not lost along the way.
|
|
12886
|
-
module.exports=wrappy;function wrappy(fn,cb){if(fn&&cb)return wrappy(fn)(cb);if(typeof fn!=='function')throw new TypeError('need wrapper function');Object.keys(fn).forEach(function(k){wrapper[k]=fn[k];});return wrapper;function wrapper(){var args=new Array(arguments.length);for(var i=0;i<args.length;i++){args[i]=arguments[i];}var ret=fn.apply(this,args);var cb=args[args.length-1];if(typeof ret==='function'&&ret!==cb){Object.keys(cb).forEach(function(k){ret[k]=cb[k];});}return ret;}}},{}],349:[function(require,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(){var target={};for(var i=0;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;}},{}],350:[function(require,module,exports){module.exports={"name":"pict-docuserve","version":"1.4.
|
|
12928
|
+
module.exports=wrappy;function wrappy(fn,cb){if(fn&&cb)return wrappy(fn)(cb);if(typeof fn!=='function')throw new TypeError('need wrapper function');Object.keys(fn).forEach(function(k){wrapper[k]=fn[k];});return wrapper;function wrapper(){var args=new Array(arguments.length);for(var i=0;i<args.length;i++){args[i]=arguments[i];}var ret=fn.apply(this,args);var cb=args[args.length-1];if(typeof ret==='function'&&ret!==cb){Object.keys(cb).forEach(function(k){ret[k]=cb[k];});}return ret;}}},{}],349:[function(require,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(){var target={};for(var i=0;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;}},{}],350:[function(require,module,exports){module.exports={"name":"pict-docuserve","version":"1.4.10","description":"Pict Documentation Server - A single-page documentation viewer built on Pict","main":"source/Pict-Application-Docuserve.js","bin":{"pict-docuserve":"source/cli/Docuserve-CLI-Run.js"},"files":["source/","dist/","html/"],"scripts":{"start":"node source/cli/Docuserve-CLI-Run.js serve","brand":"node node_modules/pict-section-theme/bin/pict-section-theme-brand.js --manifest ../../../Retold-Modules-Manifest.json --module pict-docuserve","build":"npx quack build && npx quack copy","build-docs":"npx quack build && npx quack copy && node source/cli/Docuserve-CLI-Run.js inject ./docs && node example_applications/build-examples.js stage-docs","serve-docs":"node source/cli/Docuserve-CLI-Run.js serve ./docs","serve-examples":"node example_applications/build-examples.js","test":"npx quack test","tests":"npx quack test -g","coverage":"npx quack coverage","prepublishOnly":"npm run build"},"author":"steven velozo <steven@velozo.com>","license":"MIT","dependencies":{"fable-serviceproviderbase":"^3.0.19","lunr":"^2.3.9","pict":"^1.0.372","pict-application":"^1.0.34","pict-provider":"^1.0.13","pict-provider-theme":"^1.1.2","pict-section-code":"^1.0.11","pict-section-content":"^1.0.11","pict-section-histogram":"^1.0.1","pict-section-modal":"^1.1.4","pict-section-theme":"^1.1.1","pict-service-commandlineutility":"^1.0.19","pict-view":"^1.0.68"},"devDependencies":{"pict-docuserve":"^1.4.4","quackage":"^1.3.0"},"copyFilesSettings":{"whenFileExists":"overwrite"},"copyFiles":[{"from":"./html/*","to":"./dist/"}],"mocha":{"diff":true,"extension":["js"],"package":"./package.json","reporter":"spec","slow":"75","timeout":"5000","ui":"tdd","watch-files":["source/**/*.js","test/**/*.js"],"watch-ignore":["lib/vendor"]},"retold":{"brand":{"Hash":"pict-docuserve","Name":"Pict Docuserve","Tagline":"A documentation viewer built on Pict","Palette":"default","Icon":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 96 96\" width=\"96\" height=\"96\">\n\t\t<defs>\n\t\t\t<clipPath id=\"frame-pict-docuserve-filled-light\">\n\t\t\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\" fill=\"#692bbf\"/>\n\t\t<g clip-path=\"url(#frame-pict-docuserve-filled-light)\"><rect x=\"18\" y=\"30\" width=\"48\" height=\"48\" rx=\"8\" fill=\"#c13ccd\" opacity=\"0.9\"/>\n\t\t\t\t\t<rect x=\"30\" y=\"18\" width=\"48\" height=\"48\" rx=\"8\" fill=\"rgba(255,255,255,0.18)\"/></g>\n\t\t<text x=\"48\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\"\n\t\t\tfont-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n\t\t\tfont-size=\"38\" font-weight=\"600\"\n\t\t\tfill=\"#ffffff\" letter-spacing=\"-1\">PD</text>\n\t</svg>","IconType":"svg","Favicon":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 96 96\" width=\"96\" height=\"96\">\n\t\t<defs>\n\t\t\t<clipPath id=\"fav-pict-docuserve-light\">\n\t\t\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\" fill=\"#692bbf\"/>\n\t\t<g clip-path=\"url(#fav-pict-docuserve-light)\"><rect x=\"28\" y=\"16\" width=\"52\" height=\"52\" rx=\"9\" fill=\"rgba(255,255,255,0.22)\"/></g>\n\t\t<text x=\"48\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\"\n\t\t\tfont-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n\t\t\tfont-size=\"60\" font-weight=\"800\"\n\t\t\tfill=\"#ffffff\" letter-spacing=\"-1\">P</text>\n\t</svg>","FaviconDark":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 96 96\" width=\"96\" height=\"96\">\n\t\t<defs>\n\t\t\t<clipPath id=\"fav-pict-docuserve-dark\">\n\t\t\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\" fill=\"#9a6fd8\"/>\n\t\t<g clip-path=\"url(#fav-pict-docuserve-dark)\"><rect x=\"28\" y=\"16\" width=\"52\" height=\"52\" rx=\"9\" fill=\"rgba(255,255,255,0.22)\"/></g>\n\t\t<text x=\"48\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\"\n\t\t\tfont-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n\t\t\tfont-size=\"60\" font-weight=\"800\"\n\t\t\tfill=\"#101418\" letter-spacing=\"-1\">P</text>\n\t</svg>","Colors":{"Primary":"#692bbf","Secondary":"#c13ccd","PrimaryLight":"#692bbf","PrimaryDark":"#9a6fd8","SecondaryLight":"#c13ccd","SecondaryDark":"#d48adb"}}}};},{}],351:[function(require,module,exports){/**
|
|
12887
12929
|
* Docuserve-Brand — docuserve's own wordmark, used only as a fallback.
|
|
12888
12930
|
*
|
|
12889
12931
|
* Docuserve is a viewer: the docs being served dictate the brand, not
|