@pagenary/publisher 2026.6.15 → 2026.6.16

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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/scripts/build-tenants.js +10 -5
  3. package/site/{app.54e1ad90b733.js → app.b987cce735d6.js} +1 -1
  4. package/site/app.js +1 -1
  5. package/site/index.html +2 -2
  6. package/site/{manifest.95224f06782d.js → manifest.76e14cbcc513.js} +3 -3
  7. package/site/manifest.js +3 -3
  8. package/site/pages/accessible-authoring.html +1 -1
  9. package/site/pages/api.html +1 -1
  10. package/site/pages/architecture.html +1 -1
  11. package/site/pages/blog-layout.html +2 -2
  12. package/site/pages/deployment.html +1 -1
  13. package/site/pages/developer-guide.html +1 -1
  14. package/site/pages/extending.html +1 -1
  15. package/site/pages/overview.html +1 -1
  16. package/site/pages/page-effects.html +1 -1
  17. package/site/pages/publishing.html +1 -1
  18. package/site/pages/quickstart.html +1 -1
  19. package/site/pages/search-and-data.html +1 -1
  20. package/site/pages/seo-strategy.html +1 -1
  21. package/site/pages/showcase-gallery.html +1 -1
  22. package/site/pages/showcase-story.html +1 -1
  23. package/site/pages/tenant-config.html +5 -5
  24. package/site/pages/theming-recipes.html +1 -1
  25. package/site/pages/welcome.html +1 -1
  26. package/site/robots.txt +1 -1
  27. package/site/search-index/manifest.json +3 -3
  28. package/site/search-index/metadata.json +20 -20
  29. package/site/search-index/{part-0000.64586040c481.json → part-0000.510602c32169.json} +20 -20
  30. package/site/search-index/part-0000.json +20 -20
  31. package/site/sections/{blog-layout.f34ad33cdde0.js → blog-layout.3e80561d6838.js} +1 -1
  32. package/site/sections/blog-layout.js +1 -1
  33. package/site/sections/{tenant-config.552c0d8c6d2b.js → tenant-config.532868a466d7.js} +1 -1
  34. package/site/sections/tenant-config.js +1 -1
  35. package/site/sitemap.xml +19 -19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagenary/publisher",
3
- "version": "2026.6.15",
3
+ "version": "2026.6.16",
4
4
  "type": "module",
5
5
  "description": "Multi-tenant static publishing component for Pagenary platform.",
6
6
  "license": "AGPL-3.0-or-later",
@@ -3942,8 +3942,11 @@ async function processNestedContent(sourceDir, distDir, tenantId, contentRoot, o
3942
3942
  const layout = typeof config.layout === 'string' ? config.layout.toLowerCase() : 'docs';
3943
3943
  const blogCfg = (config.blog && typeof config.blog === 'object') ? config.blog : {};
3944
3944
  const siteConfig = {
3945
- bottomNav: rootManifest?.bottomNav || 'mobile',
3946
- bottomNavSections: rootManifest?.bottomNavSections || [],
3945
+ // Prev/next article nav at the bottom of each page is a generic docs feature,
3946
+ // visible on all screens by default. Honor config.json or the root manifest;
3947
+ // a tenant can scope it down with "mobile" or turn it off with "never".
3948
+ bottomNav: config.bottomNav || rootManifest?.bottomNav || 'always',
3949
+ bottomNavSections: config.bottomNavSections || rootManifest?.bottomNavSections || [],
3947
3950
  // Pass SEO-relevant config to SPA for dynamic meta tag updates.
3948
3951
  // siteUrl falls back to `domain` (#15); ogImage drives social cards (#16).
3949
3952
  siteTitle: config.title || '',
@@ -4142,7 +4145,7 @@ function buildManifestModuleSource(manifestEntries, defaultSection, siteConfig =
4142
4145
  const manifestJson = JSON.stringify(manifestEntries, null, 2);
4143
4146
  const defaultJson = JSON.stringify(defaultSection || null);
4144
4147
  const configJson = JSON.stringify({
4145
- bottomNav: siteConfig.bottomNav || 'mobile', // 'always' | 'mobile' | 'never'
4148
+ bottomNav: siteConfig.bottomNav || 'always', // 'always' | 'mobile' | 'never'
4146
4149
  bottomNavSections: siteConfig.bottomNavSections || [], // Section prefixes to always show nav
4147
4150
  ...siteConfig
4148
4151
  }, null, 2);
@@ -4335,8 +4338,10 @@ async function processTenantManifestLegacy(sourceDir, distDir, tenantId, options
4335
4338
 
4336
4339
  // Extract site configuration from manifest
4337
4340
  const siteConfig = {
4338
- bottomNav: manifestData.bottomNav || 'mobile',
4339
- bottomNavSections: manifestData.bottomNavSections || [],
4341
+ // Prev/next article nav is a generic docs feature, visible on all screens by
4342
+ // default; honor config.json or the manifest, scope down with "mobile"/"never".
4343
+ bottomNav: config.bottomNav || manifestData.bottomNav || 'always',
4344
+ bottomNavSections: config.bottomNavSections || manifestData.bottomNavSections || [],
4340
4345
  // SEO-relevant config for runtime meta updates — parity with the nested path
4341
4346
  // so the runtime <title> brand matches config.title, not a generic fallback (#29).
4342
4347
  siteTitle: config.title || manifestData.title || '',
@@ -1 +1 @@
1
- import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.95224f06782d.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.2131b53bea6b.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
1
+ import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.76e14cbcc513.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.2131b53bea6b.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
package/site/app.js CHANGED
@@ -1 +1 @@
1
- import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.95224f06782d.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.2131b53bea6b.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
1
+ import{MANIFEST as e,DEFAULT_SECTION as t,findSection as n,getAdjacentSections as a,SITE_CONFIG as o,EXPORT_CONFIG as s}from"./manifest.76e14cbcc513.js";import{updateMetaTags as i}from"./seo.90687a1d3d78.js";import{escapeRegExp as r,searchContentPage as c,flattenManifest as l,findPreferredIndex as d,resolveSectionMetadata as m}from"./lib/search.c52bcae8afda.js";import{resolveTarget as p,resolveEntry as u}from"./lib/router.f9d1cfba022d.js";import{composeExportDocument as v,collectExportableSections as f}from"./lib/export.2db2c0bd974c.js";import{renderMermaidBlocks as h}from"./mermaid-init.f25ee3b6ec1e.js";import{initMediaEmbeds as g}from"./media-init.16fde41d8850.js";import{highlightCodeBlocks as y}from"./syntax-highlight.9d51f36b24da.js";import{initPageEffects as b}from"./lib/page-effects.2131b53bea6b.js";const E=document.getElementById("app"),x=document.getElementById("nav"),C=document.getElementById("year"),T=document.getElementById("exportBtn"),L=document.getElementById("commandToggle"),N=document.getElementById("commandPalette"),k=document.getElementById("commandInput"),$=document.getElementById("commandList"),w=document.getElementById("mobileMenuToggle"),A=document.querySelector(".sidebar"),S=document.body.hasAttribute("data-reading-progress"),I=document.body.dataset.readingProgressMode||"bar",M="docs-toolkit-command-query",H=new Map,P=new Map,_=new Map,B=new Set;let q=[],R=0,F=!1,j=(localStorage.getItem(M)||"").trim(),D=!1;function W(e,t){const n=document.createElement("a");return n.href=e.url,n.target="_blank",n.rel="noopener noreferrer",n.className=`${t} nav-external`,n.title=e.summary||e.title,n.innerHTML=`\n <span class="nav-title">${e.title}<span class="nav-external-icon" aria-label="(opens in new tab)">↗</span></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,n}function O(e,t={}){const{scrollToHighlight:a=!1}=t,{targetId:o,parentId:s}=function(e){return p(e,n)}(e);F&&ee(),s&&z(s,!0),D=a||Boolean(j),location.hash.replace("#","")===o?V():location.hash=`#${o}`}function U(){return location.hash.replace("#","")||t}async function V(){const s=U(),r=u(s,n);if(!r)return;const{entry:c,targetId:l,parentId:d}=r;l===s?(d&&z(d,!0),function(e,t=null){P.forEach(e=>{e.setAttribute("aria-current","false")});const n=P.get(e);if(n&&n.setAttribute("aria-current","page"),t){const e=P.get(t);e&&e.setAttribute("aria-current","page")}}(c.id,d),await async function(s){if(!s)return;const r=await import(s.module),c=r.load||r.default;if("function"!=typeof c)return void(E.innerHTML='<article class="section"><p>Section failed to load.</p></article>');const l=await c();E.innerHTML=l.html||"",function(t){if(function(e){const t=function(e){if(S)return!0;const t=e?.progress;return!0===e?.reading_progress||!0===e?.readingProgress||(!0===t||!(!t||"object"!=typeof t||!0!==t.enabled&&!0!==t.bar&&"bar"!==t.mode))}(e);if(document.body.toggleAttribute("data-reading-progress",t),t){const t=e?.progress&&"object"==typeof e.progress?e.progress.mode||(e.progress.label?"label":"bar"):I;document.body.dataset.readingProgressMode=t}else delete document.body.dataset.readingProgressMode}(t),!t)return;const n=(E.querySelector(".doc-content")||E.querySelector("article, section")||E).querySelector("h1");if(!n)return;if(t.hero){const e=document.createElement("figure");e.className="post-hero";const a=document.createElement("img");a.src=t.hero,a.alt="",a.loading="eager",e.appendChild(a),n.before(e)}const a=[];t.showDate&&t.date&&a.push(function(e){const t=String(e||"").trim();if(!t)return"";const n=/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00:00Z`:t,a=new Date(n);return Number.isNaN(a.getTime())?t:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"long",day:"numeric",timeZone:"UTC"}).format(a)}(t.date)),t.author&&a.push(`By ${t.author}`),t.showReadingTime&&t.reading_time&&a.push(t.reading_label||`${t.reading_time} min read`);let o=n,s=null;if(a.length>0){const e=document.createElement("p");e.className="doc-meta";const t=document.createElement("span");t.className="doc-meta-text",t.textContent=a.join(" · "),e.appendChild(t),n.after(e),o=e,s=e}if(t.showSummary&&t.summary){const e=document.createElement("p");e.className="doc-summary",e.textContent=t.summary,o.after(e),o=e}if(Array.isArray(t.tags)&&t.tags.length){const e=document.createElement("ul");e.className="post-tags";for(const n of t.tags){const t=document.createElement("li");t.textContent=n,e.appendChild(t)}o.after(e),o=e}!async function(t,n,a=null){const o=t.id,s=n.closest(".doc-content")||n.parentElement;let i=null;try{i=await m(e,o)}catch{return}if(U()!==o||!function(e){return!!e&&Boolean(e.concepts&&e.concepts.length||e.skos_concepts&&e.skos_concepts.length||e.relationships&&e.relationships.length||e.provenance&&e.provenance.length||e.provenance_events&&e.provenance_events.length||e.source||e.privacy)}(i))return;const r=document.createElement("div");r.className="doc-fortemi-tools";const c=`docFortemiPanel-${o}`,l=document.createElement("div");l.id=c,l.className="doc-fortemi-panel",l.hidden=!0,l.setAttribute("role","region"),l.setAttribute("aria-label","Page metadata"),function(e,t){e.textContent="",K(e,"Concepts",e=>{const n=t.skos_concepts&&t.skos_concepts.length?t.skos_concepts:t.concepts||[];n.length?function(e,t){const n=document.createElement("div");n.className="doc-fortemi-chips",t.forEach(e=>{const t=document.createElement("span");t.className="doc-fortemi-chip",t.textContent=X(e),"object"==typeof e&&e&&e.definition&&(t.title=e.definition),n.appendChild(t)}),e.appendChild(n)}(e,n):G(e,"concepts","none"),(t.skos_relations||[]).forEach(t=>{const n=X({id:t.source_id||t.source}),a=X({id:t.target_id||t.target});G(e,t.type||"related",`${J(n)} -> ${J(a)}`)})}),K(e,"Source and Provenance",e=>{G(e,"source",t.source?.repo_relative_path||t.source?.path),G(e,"locator",t.source?.locator),G(e,"updated",t.updated_at),G(e,"privacy",t.privacy?.classification),(t.provenance||[]).forEach(t=>{G(e,t.field||"field",`${t.source||"source"} (${t.confidence||"unknown"})`)}),(t.provenance_events||[]).forEach(t=>{const n=[t.agent||"unknown agent",t.source,t.started_at||t.ended_at].filter(Boolean).join(" · ");G(e,t.activity||"activity",n)})}),K(e,"Related Pages",e=>{const n=t.relationships||[];if(!n.length)return void G(e,"related","none");const a=document.createElement("ul");a.className="doc-fortemi-links",n.forEach(e=>{const t=document.createElement("li"),n=document.createElement("button");n.type="button",n.className="doc-fortemi-link";const o=function(e){return String(e?.target_id||e?.target||"").replace(/^docs:page:/,"")}(e),s=function(e){const t=Number(e);return Number.isFinite(t)?`${Math.round(100*Math.max(0,Math.min(1,t)))}%`:null}(e.confidence),i=e.label||e.type||"related",r=Array.isArray(e.metadata?.shared_concepts)?e.metadata.shared_concepts.map(J).join(", "):null;n.textContent=`${i}: ${J(o)}${s?` (${s})`:""}`,r&&(n.title=`Shared concepts: ${r}`),n.addEventListener("click",()=>{o&&O(o)}),t.appendChild(n),a.appendChild(t)}),e.appendChild(a)})}(l,i);const d=document.createElement("button");d.type="button",d.className="doc-fortemi-button",d.setAttribute("aria-expanded","false"),d.setAttribute("aria-controls",c),d.title="Show page metadata",d.innerHTML='<span aria-hidden="true">i</span><span class="sr-only">Show page metadata</span>',d.addEventListener("click",()=>{const e=l.hidden;l.hidden=!e,d.setAttribute("aria-expanded",String(e))}),a?(d.classList.add("doc-fortemi-button-inline"),a.appendChild(d),s.appendChild(l)):(r.appendChild(d),s.append(r,l))}(t,o,s)}(s),await h(E),g(E),await y(E),function(e){const s=E.querySelector(".bottom-nav");s&&s.remove();const i="function"==typeof n?n(e):null;if(i&&i.collection)return void function(e){const n=function(){const e=o.postNav;if(!1===e)return null;const t=e&&"object"==typeof e?e:{};return{prev:!1!==t.prev,next:!1!==t.next,index:!1!==t.index,label:"string"==typeof t.label?t.label:null}}();if(!n)return;const{prev:s,next:i}=a(e),r=o.blogIndex||("string"==typeof t?t:null),c=n.index&&r&&r!==e,l=n.prev&&Boolean(s),d=n.next&&Boolean(i);if(!l&&!d&&!c)return;const m=document.createElement("nav");if(m.className="bottom-nav bottom-nav--posts",m.setAttribute("aria-label","Post navigation"),m.appendChild(l?Y(s,"prev"):Z()),c){const e=n.label||(o.blogIndexTitle?`All ${o.blogIndexTitle}`:"Back to index"),t=document.createElement("a");t.href=`#${r}`,t.className="bottom-nav-index",t.textContent=e,t.setAttribute("aria-label",e),t.addEventListener("click",e=>{e.preventDefault(),O(r)}),m.appendChild(t)}else m.appendChild(Z());m.appendChild(d?Y(i,"next"):Z());(E.querySelector("section")||E).appendChild(m)}(e);if("never"===o.bottomNav)return;const r=(o.bottomNavSections||[]).some(t=>e.startsWith(t)),c="mobile"===o.bottomNav&&!r,{prev:l,next:d}=a(e);if(!l&&!d)return;const m=document.createElement("nav");m.className="bottom-nav",c&&m.classList.add("mobile-only"),m.appendChild(l?Y(l,"prev"):Z()),d&&m.appendChild(Y(d,"next")),(E.querySelector("section")||E).appendChild(m)}(s.id),E.scrollTop=0,window.scrollTo(0,0),"function"==typeof l.afterRender&&l.afterRender(E),b(E),i({title:s.title,description:s.summary,siteTitle:o.siteTitle,siteUrl:o.siteUrl,sectionId:s.id,ogImage:s.ogImage||o.ogImage}),H.set(s.id,Date.now());const d=D;D=!1,ue(d),requestAnimationFrame(()=>E.focus())}(c)):location.replace(`#${l}`)}function z(e,t){if(!e)return;const n=_.get(e);t?(B.add(e),n&&n.group.classList.add("expanded")):(B.delete(e),n&&n.group.classList.remove("expanded"))}function J(e){return String(e||"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim()}function X(e){return"string"==typeof e?J(e):e.prefLabel||e.pref_label||e.label||e.id||"concept"}function G(e,t,n){if(null==n||""===n)return;const a=document.createElement("div");a.className="doc-fortemi-row";const o=document.createElement("span");o.className="doc-fortemi-key",o.textContent=t;const s=document.createElement("span");s.textContent=String(n),a.append(o,s),e.appendChild(a)}function K(e,t,n){const a=document.createElement("section");a.className="doc-fortemi-section";const o=document.createElement("h2");o.textContent=t,a.appendChild(o),n(a),e.appendChild(a)}function Y(e,t){const n=document.createElement("div");n.className=`bottom-nav-item bottom-nav-${t}`;const a=`<span class="bottom-nav-chevron">${"prev"===t?"‹":"›"}</span>`,o=document.createElement("a");o.href=`#${e.id}`,o.className="bottom-nav-link";const s="prev"===t?"Previous":"Next";return o.title=`${s}: ${e.title}`,o.setAttribute("aria-label",`${s}: ${e.title}`),o.textContent=e.title,o.addEventListener("click",t=>{t.preventDefault(),O(e.id)}),"prev"===t?(n.innerHTML=a,n.appendChild(o)):(n.appendChild(o),n.insertAdjacentHTML("beforeend",a)),n}function Z(){const e=document.createElement("div");return e.className="bottom-nav-spacer",e}function Q(){if(!N||!k)return;F=!0,N.hidden=!1;const e=j;k.value=e,se(e),requestAnimationFrame(()=>{k.focus(),e&&k.select()})}function ee(){N&&k&&(F=!1,N.hidden=!0,k.blur())}!function(){x.innerHTML="",P.clear(),_.clear();let t=B.size>0;e.forEach((e,n)=>{if(e.url){const t=W(e,"nav-leaf");return void x.appendChild(t)}if(e.subsections&&e.subsections.length){const n=document.createElement("div");n.className="nav-group";const a=Boolean(e.module),o=document.createElement("button");o.type="button",o.className="nav-parent"+(a?" nav-parent-with-content":""),o.dataset.section=e.id,o.title=e.summary,a?(o.innerHTML=`\n <span class="nav-title-link">${e.title}</span>\n <span class="nav-expand-toggle" aria-label="Expand"></span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.querySelector(".nav-title-link").addEventListener("click",t=>{t.stopPropagation(),O(e.id,{scrollToHighlight:Boolean(j)})}),o.querySelector(".nav-expand-toggle").addEventListener("click",t=>{t.stopPropagation();const n=!B.has(e.id);z(e.id,n)}),o.addEventListener("click",t=>{if(t.target===o){const t=!B.has(e.id);z(e.id,t)}})):(o.innerHTML=`\n <span class="nav-title">${e.title}</span>\n ${e.summary?`<span class="nav-summary">${e.summary}</span>`:""}\n `,o.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)}));const s=document.createElement("div");s.className="nav-sublist",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void s.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-nested";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-nested",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-nested",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-deep";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-deep",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const o=document.createElement("div");o.className="nav-sublist nav-sublist-deep",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void o.appendChild(t)}if(e.subsections&&e.subsections.length){const t=document.createElement("div");t.className="nav-group nav-group-ultra";const n=document.createElement("button");n.type="button",n.className="nav-parent nav-parent-ultra",n.dataset.section=e.id,n.title=e.summary||e.title,n.innerHTML=`<span class="nav-title">${e.title}</span>`,n.addEventListener("click",()=>{const t=!B.has(e.id);z(e.id,t)});const a=document.createElement("div");a.className="nav-sublist nav-sublist-ultra",e.subsections.forEach(e=>{if(e.url){const t=W(e,"nav-item");return void a.appendChild(t)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-ultra"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),o.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-deep"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),o.appendChild(t),P.set(e.id,t)}),t.append(n,o),a.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:o});const s=B.has(e.id)&&!e.collapsed;return void z(e.id,s)}const t=document.createElement("button");t.type="button",t.className="nav-item nav-item-nested"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary||e.title,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary||""}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),a.appendChild(t),P.set(e.id,t)}),t.append(n,a),s.appendChild(t),P.set(e.id,n),_.set(e.id,{group:t,button:n,list:a});const o=B.has(e.id)&&!e.collapsed;return void z(e.id,o)}const t=document.createElement("button");t.type="button",t.className="nav-item"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),s.appendChild(t),P.set(e.id,t)}),n.append(o,s),x.appendChild(n),P.set(e.id,o),_.set(e.id,{group:n,button:o,list:s});const i=!e.collapsed&&(B.has(e.id)||!t&&!B.size);z(e.id,i),i&&(t=!0)}else{const t=document.createElement("button");t.type="button",t.className="nav-leaf"+(e.type?` nav-type-${e.type}`:""),t.dataset.section=e.id,t.title=e.summary,t.innerHTML=`\n <span class="nav-title">${e.title}${"press-release"===e.type?'<span class="nav-type-icon" aria-label="Press Release"></span>':""}</span>\n <span class="nav-summary">${e.summary}</span>\n `,t.addEventListener("click",()=>O(e.id,{scrollToHighlight:Boolean(j)})),x.appendChild(t),P.set(e.id,t)}})}(),function(){const e=document.getElementById("themePicker"),t=document.getElementById("themeStylesheet");if(!e||!t)return;let n;try{n=JSON.parse(e.dataset.themes||"[]")}catch{return}if(!Array.isArray(n)||0===n.length)return;const a="pagenary:theme",o=e=>{const t=n.find(t=>t.name===e);return t?t.file:null};function s(n){const a=o(n);a&&(t.setAttribute("href",a),e.value=n)}let i=null;try{i=localStorage.getItem(a)}catch{i=null}const r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;s(i&&o(i)?i:r&&o("dark")?"dark":e.dataset.default&&o(e.dataset.default)?e.dataset.default:n[0].name),e.addEventListener("change",()=>{s(e.value);try{localStorage.setItem(a,e.value)}catch{}})}(),j&&(D=!0),window.addEventListener("hashchange",()=>{j&&(D=!0),V()}),C.textContent=(new Date).getFullYear(),V(),L&&N&&k&&$&&(L.addEventListener("click",()=>{F?ee():Q()}),k.addEventListener("input",()=>{const e=k.value;pe(e,!0),se(e)}),k.addEventListener("keydown",e=>{const t=q.length-1;if("ArrowDown"===e.key)e.preventDefault(),R=Math.min(t,R+1),re();else if("ArrowUp"===e.key)e.preventDefault(),R=Math.max(0,R-1),re();else if("Enter"===e.key){e.preventDefault();const t=q[R];t&&(pe(k.value,!0),O(t.id,{scrollToHighlight:!0}),ee())}else"Escape"===e.key&&(e.preventDefault(),ee())}),$.addEventListener("click",e=>{const t=e.target.closest("[data-section]");if(!t)return;const n=t.dataset.section;n&&(pe(k.value,!0),O(n,{scrollToHighlight:!0}),ee())}),N.addEventListener("click",e=>{e.target===N&&ee()}),$.addEventListener("scroll",()=>{oe.loading||oe.complete||$.scrollTop+$.clientHeight>=$.scrollHeight-48&&ie(!1)}),window.addEventListener("keydown",e=>{const t=e.target,n=t&&("INPUT"===t.tagName||"TEXTAREA"===t.tagName||t.isContentEditable),a=e.metaKey||e.ctrlKey;"k"===e.key.toLowerCase()&&a||"/"===e.key&&!n?(e.preventDefault(),F?ee():Q()):"Escape"===e.key&&F&&(e.preventDefault(),ee())}));let te=null,ne=!1;const ae=25;let oe={query:"",offset:0,total:0,complete:!0,loading:!1};async function se(e){$&&(oe={query:e,offset:0,total:0,complete:!1,loading:!1},q=[],!ne&&e.trim()&&(ne=!0,$.innerHTML='<li class="cmd-item cmd-loading">Indexing content...</li>'),clearTimeout(te),te=setTimeout(async()=>{await ie(!0);const e=U();R=d(q,e),re(),ne=!1},e.trim()?150:0))}async function ie(t=!1){if(oe.loading)return;if(!t&&oe.complete)return;const n=oe.query;let a;oe.loading=!0;try{a=await c(e,n,{offset:oe.offset,limit:ae})}catch{return void(oe.loading=!1)}n===oe.query?(q=t?a.items:q.concat(a.items),oe.offset=q.length,oe.total=a.total,oe.complete=a.complete||0===a.items.length,oe.loading=!1,function(){if($){if($.innerHTML="",!q.length){const e=document.createElement("li");return e.className="cmd-item",e.setAttribute("aria-selected","false"),e.textContent="No matches.",void $.appendChild(e)}if(q.forEach(e=>{const t=document.createElement("li");t.className="cmd-item",t.dataset.section=e.id,t.setAttribute("role","option");const n=document.createElement("span");if(n.className="cmd-item-title",n.textContent=e.title,e.group){const t=document.createElement("span");t.className="cmd-item-group",t.textContent=e.group,n.prepend(t)}const a=document.createElement("span");if(a.className="cmd-item-summary",a.textContent=e.summary||"",t.append(n,a),e.searchSnippet&&e.searchSnippet!==e.summary){const n=document.createElement("span");n.className="cmd-item-snippet",n.textContent=e.searchSnippet,t.appendChild(n)}if("number"==typeof e.searchRank&&e.searchRank>0){const n=document.createElement("span");n.className="cmd-item-score",n.textContent=`Rank ${e.searchRank}`,t.appendChild(n)}$.appendChild(t)}),!oe.complete&&oe.total>q.length){const e=document.createElement("li");e.className="cmd-item cmd-more",e.setAttribute("aria-selected","false"),e.setAttribute("role","presentation"),e.textContent=`Showing ${q.length} of ${oe.total} — scroll for more`,$.appendChild(e)}}}()):oe.loading=!1}function re(){$&&Array.from($.children).forEach((e,t)=>{const n=t===R&&q.length;e.setAttribute("aria-selected",n?"true":"false"),n&&e.scrollIntoView({block:"nearest"})})}const ce=!s||!1!==s.enabled,le=s&&Array.isArray(s.scopes)&&s.scopes.length?s.scopes:["page","site"];T&&(ce?T.addEventListener("click",function(){const t=document.createElement("div");t.className="export-options-overlay";const n=le.map(e=>{const t=de[e];return t?`<button type="button" class="export-option-btn" data-scope="${e}">\n <span class="export-option-title">${t.title}</span>\n <span class="export-option-desc">${t.desc}</span>\n </button>`:""}).join("");t.innerHTML=`\n <div class="export-options-modal">\n <div class="export-options-header">EXPORT OPTIONS</div>\n <div class="export-options-buttons">\n ${n}\n </div>\n <button type="button" class="export-cancel-btn">Cancel</button>\n </div>\n `,document.body.appendChild(t),setTimeout(()=>t.classList.add("active"),10);const a=()=>{t.classList.remove("active"),setTimeout(()=>t.remove(),200)};t.querySelector(".export-cancel-btn").addEventListener("click",a),t.addEventListener("click",e=>{e.target===t&&a()}),t.querySelectorAll(".export-option-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.scope;a(),async function(t="site"){if(!T)return;const n=T.innerHTML;T.disabled=!0;const a=document.createElement("div");a.className="export-loading-overlay",a.innerHTML='\n <div class="export-loading-modal">\n <div class="export-loading-header">\n <div class="export-loading-title">COMPILING DOCUMENTATION</div>\n <div class="export-loading-subtitle">Assembling all sections into unified document</div>\n </div>\n <div class="export-loading-progress">\n <div class="export-loading-bar">\n <div class="export-loading-fill"></div>\n </div>\n <div class="export-loading-status-container">\n <div class="export-loading-status">Initializing...</div>\n </div>\n </div>\n <div class="export-loading-scanner">\n <div class="scanner-line"></div>\n </div>\n </div>\n ',document.body.appendChild(a),setTimeout(()=>a.classList.add("active"),10);const o=a.querySelector(".export-loading-fill"),i=a.querySelector(".export-loading-status");try{let n;if("page"===t){const t=U(),a=f(e).find(e=>e.id===t);n=a?[a]:[]}else n=f(e);if(0===n.length)return alert("No content available to export."),a.remove(),void(T.disabled=!1);const r=[],c=n.length;let l=0;for(const e of n){l++;const n=l/c*100;o.style.width=`${n}%`,i.textContent="page"===t?`Exporting: ${e.title}`:`Processing section ${l} of ${c}: ${e.title}`,await new Promise(e=>setTimeout(e,50));try{const t=await import(e.module),n=t.load||t.default;if("function"!=typeof n)continue;const a=me((await n()).html||"");r.push({section:e,html:a})}catch(t){console.error("Failed to include section in export",e.id,t)}}i.textContent="Generating document...",await new Promise(e=>setTimeout(e,200));const d=v(r,s);i.textContent="Opening print dialog...",await new Promise(e=>setTimeout(e,100)),function(e){document.getElementById("exportPrintFrame")?.remove();const t=document.createElement("iframe");t.id="exportPrintFrame",t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex","-1"),t.style.cssText="position:fixed;width:0;height:0;border:0;left:-9999px;top:0;visibility:hidden;",document.body.appendChild(t);let n=!1;const a=()=>{n||(n=!0,setTimeout(()=>t.remove(),500))},o=t.contentWindow.document;o.open(),o.write(e),o.close();const s=()=>{const e=t.contentWindow;try{e.addEventListener("afterprint",a,{once:!0}),e.focus(),e.print(),setTimeout(a,6e4)}catch(e){console.error("Export print failed",e),t.remove()}};"complete"===t.contentWindow.document.readyState?setTimeout(s,60):t.addEventListener("load",()=>setTimeout(s,60),{once:!0})}(d),a.classList.remove("active"),setTimeout(()=>a.remove(),300)}catch(e){console.error("Export failed",e),alert("Export failed. Check console for details."),a.remove()}finally{T.disabled=!1,T.innerHTML=n}}(n)})})}):T.remove());const de={page:{title:"Current Page",desc:"Export only this section"},site:{title:"Entire Site",desc:"Export all documentation"}};function me(e){const t=document.createElement("div");t.innerHTML=e,t.querySelectorAll("script").forEach(e=>e.remove()),t.querySelectorAll("button").forEach(e=>e.removeAttribute("onclick")),t.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)});const n=t.querySelector("section");return n?n.innerHTML:t.innerHTML}function pe(e,t=!1){j=e.trim(),t&&(j?localStorage.setItem(M,j):localStorage.removeItem(M)),ue()}function ue(e=!1){E&&function(e,t,{scrollToFirst:n=!1}={}){if(!e)return;if(function(e){e&&e.querySelectorAll("mark.hl").forEach(e=>{const t=document.createTextNode(e.textContent||"");e.replaceWith(t)})}(e),!t)return;const a=t.split(/\s+/).map(e=>e.trim()).filter(Boolean);if(!a.length)return;const o=a.map(e=>e.toLowerCase()),s=new Set(["SCRIPT","STYLE","CODE","PRE"]),i=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){if(!e.nodeValue||!e.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=e.parentNode;return t&&s.has(t.tagName)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),c=[];let l;for(;l=i.nextNode();){const e=l.nodeValue.toLowerCase();o.some(t=>e.includes(t))&&c.push(l)}const d=new RegExp(`(${a.map(r).join("|")})`,"gi");c.forEach(e=>{const t=e.nodeValue,n=[];let a=0;t.replace(d,(e,o,s)=>{s>a&&n.push(document.createTextNode(t.slice(a,s)));const i=document.createElement("mark");return i.className="hl",i.textContent=e,n.push(i),a=s+e.length,e}),a<t.length&&n.push(document.createTextNode(t.slice(a)));const o=document.createDocumentFragment();n.forEach(e=>o.appendChild(e)),e.parentNode.replaceChild(o,e)}),n&&requestAnimationFrame(()=>{const t=e.querySelector("mark.hl");t&&t.scrollIntoView({behavior:"smooth",block:"center"})})}(E,j,{scrollToFirst:e})}if(w&&A){const e=()=>document.body.dataset.navCollapse||"overlay",t=()=>window.innerWidth<=960||"overlay"===e(),n=()=>{A.classList.remove("mobile-open"),document.body.classList.remove("menu-open"),w.setAttribute("aria-expanded","false")};window.innerWidth>960&&"overlay"!==e()&&w.setAttribute("aria-expanded","true"),w.addEventListener("click",()=>{if(window.innerWidth>960&&"overlay"!==e()){const e=document.body.classList.toggle("nav-collapsed");return void w.setAttribute("aria-expanded",String(!e))}const t=A.classList.toggle("mobile-open");document.body.classList.toggle("menu-open",t),w.setAttribute("aria-expanded",String(t))}),x.addEventListener("click",e=>{if(!t())return;const a=e.target.closest(".nav-item, .nav-leaf, .nav-parent");a&&(a.classList.contains("nav-item")||a.classList.contains("nav-leaf"))&&n()}),document.addEventListener("click",e=>{t()&&A.classList.contains("mobile-open")&&!A.contains(e.target)&&!w.contains(e.target)&&n()})}const ve=document.getElementById("brandHome");ve&&ve.addEventListener("click",e=>{e.preventDefault(),O(t)});
package/site/index.html CHANGED
@@ -24,7 +24,7 @@
24
24
  </script>
25
25
  <link rel="icon" type="image/png" href="./favicon.png" />
26
26
  <link rel="stylesheet" href="./styles.bdb30ba34de5.css" />
27
- <meta name="x-build" content="2026-06-27T21:16:40.600Z" />
27
+ <meta name="x-build" content="2026-06-28T00:29:01.805Z" />
28
28
  </head>
29
29
  <body data-nav-collapse="overlay" data-page-toc="rail" data-page-toc-min="4">
30
30
  <a class="skip-link" href="#app">Skip to content</a>
@@ -69,6 +69,6 @@
69
69
  <ul id="commandList" class="cmd-list" role="listbox"></ul>
70
70
  </div>
71
71
  </div>
72
- <script type="module" src="./app.54e1ad90b733.js"></script>
72
+ <script type="module" src="./app.b987cce735d6.js"></script>
73
73
  </body>
74
74
  </html>
@@ -45,7 +45,7 @@ export const MANIFEST = [
45
45
  "id": "tenant-config",
46
46
  "title": "Tenant Configuration",
47
47
  "summary": "Every config.json option: branding, theming, SEO, nav, and export.",
48
- "module": "./sections/tenant-config.552c0d8c6d2b.js"
48
+ "module": "./sections/tenant-config.532868a466d7.js"
49
49
  },
50
50
  {
51
51
  "id": "theming-recipes",
@@ -57,7 +57,7 @@ export const MANIFEST = [
57
57
  "id": "blog-layout",
58
58
  "title": "Blog Layout",
59
59
  "summary": "Turn a tenant into a blog: chronological index, hero posts, bylines, and tags.",
60
- "module": "./sections/blog-layout.f34ad33cdde0.js"
60
+ "module": "./sections/blog-layout.3e80561d6838.js"
61
61
  },
62
62
  {
63
63
  "id": "page-effects",
@@ -198,7 +198,7 @@ export function getAdjacentSections(currentId) {
198
198
 
199
199
  // Site configuration (from tenant _manifest.json)
200
200
  export const SITE_CONFIG = {
201
- "bottomNav": "mobile",
201
+ "bottomNav": "always",
202
202
  "bottomNavSections": [],
203
203
  "siteTitle": "Pagenary Docs",
204
204
  "siteUrl": "https://docs.pagenary.com",
package/site/manifest.js CHANGED
@@ -45,7 +45,7 @@ export const MANIFEST = [
45
45
  "id": "tenant-config",
46
46
  "title": "Tenant Configuration",
47
47
  "summary": "Every config.json option: branding, theming, SEO, nav, and export.",
48
- "module": "./sections/tenant-config.552c0d8c6d2b.js"
48
+ "module": "./sections/tenant-config.532868a466d7.js"
49
49
  },
50
50
  {
51
51
  "id": "theming-recipes",
@@ -57,7 +57,7 @@ export const MANIFEST = [
57
57
  "id": "blog-layout",
58
58
  "title": "Blog Layout",
59
59
  "summary": "Turn a tenant into a blog: chronological index, hero posts, bylines, and tags.",
60
- "module": "./sections/blog-layout.f34ad33cdde0.js"
60
+ "module": "./sections/blog-layout.3e80561d6838.js"
61
61
  },
62
62
  {
63
63
  "id": "page-effects",
@@ -198,7 +198,7 @@ export function getAdjacentSections(currentId) {
198
198
 
199
199
  // Site configuration (from tenant _manifest.json)
200
200
  export const SITE_CONFIG = {
201
- "bottomNav": "mobile",
201
+ "bottomNav": "always",
202
202
  "bottomNavSections": [],
203
203
  "siteTitle": "Pagenary Docs",
204
204
  "siteUrl": "https://docs.pagenary.com",
@@ -27,7 +27,7 @@
27
27
  "headline": "Accessible Authoring",
28
28
  "description": "Practical guidance for alt text, headings, links, tables, media, embeds, and custom HTML.",
29
29
  "url": "https://docs.pagenary.com/pages/accessible-authoring.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/accessible-authoring.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "API Reference",
28
28
  "description": "Module-level documentation for the publisher internals.",
29
29
  "url": "https://docs.pagenary.com/pages/api.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/api.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Architecture",
28
28
  "description": "The static SPA pattern, build pipeline, and tenant content model.",
29
29
  "url": "https://docs.pagenary.com/pages/architecture.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/architecture.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Blog Layout",
28
28
  "description": "Turn a tenant into a blog: chronological index, hero posts, bylines, and tags.",
29
29
  "url": "https://docs.pagenary.com/pages/blog-layout.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/blog-layout.html"
@@ -155,7 +155,7 @@
155
155
  <p>(`date · By author · N min read`) below it, and tag chips after the summary. A persistent <a href="#post-navigation">post navigation</a> control closes the page. The reading column keeps a comfortable measure.</p>
156
156
  <h2 id="post-navigation">Post navigation</h2>
157
157
  <p>Every post ends with a persistent, accessible control — <strong>previous post · back to index · next post</strong> — so readers can move through the blog even with the sidebar hidden. Prev/next are scoped to the collection (newest→oldest, with titles) and never jump out to the index or another group.</p>
158
- <p>It is a real `&lt;nav aria-label=&quot;Post navigation&quot;&gt;` of `&lt;a&gt;` links, visible on all screen sizes (unlike the docs prev/next, which is mobile-only). Trim or disable the affordances with `postNav` in config:</p>
158
+ <p>It is a real `&lt;nav aria-label=&quot;Post navigation&quot;&gt;` of `&lt;a&gt;` links, visible on all screen sizes like the docs prev/next article nav, which is also visible on all screens by default (`bottomNav: &quot;always&quot;`). Trim or disable the affordances with `postNav` in config:</p>
159
159
  <pre><code class="language-json">{ &quot;postNav&quot;: { &quot;prev&quot;: true, &quot;next&quot;: true, &quot;index&quot;: true, &quot;label&quot;: &quot;All posts&quot; } }</code></pre>
160
160
  <p>Set `&quot;postNav&quot;: false` to remove it entirely. See <a href="#tenant-config">Tenant Configuration</a> for the full reference.</p>
161
161
  <h2 id="living-scroll">Living scroll</h2>
@@ -27,7 +27,7 @@
27
27
  "headline": "Deployment",
28
28
  "description": "Hosting the static output and multi-tenant domain routing.",
29
29
  "url": "https://docs.pagenary.com/pages/deployment.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/deployment.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Developer Guide",
28
28
  "description": "Project layout, scripts, and the content authoring workflow.",
29
29
  "url": "https://docs.pagenary.com/pages/developer-guide.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/developer-guide.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Extending",
28
28
  "description": "Add section templates, content types, and build behaviors.",
29
29
  "url": "https://docs.pagenary.com/pages/extending.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/extending.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Overview",
28
28
  "description": "From nothing to a published site using the npm package.",
29
29
  "url": "https://docs.pagenary.com/pages/overview.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/overview.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Page Effects",
28
28
  "description": "Rich heroes, reveal-on-scroll, parallax, sticky, and CTA bands — opt-in and accessible.",
29
29
  "url": "https://docs.pagenary.com/pages/page-effects.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/page-effects.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Publishing",
28
28
  "description": "Ship your docs live with a GitHub or Gitea Actions workflow.",
29
29
  "url": "https://docs.pagenary.com/pages/publishing.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/publishing.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Quickstart",
28
28
  "description": "Install, build the default bundle, and serve it locally.",
29
29
  "url": "https://docs.pagenary.com/pages/quickstart.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/quickstart.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "Search & Data",
28
28
  "description": "Ranked hybrid search, a knowledge graph, and faceted metadata — powered by Fortémi.",
29
29
  "url": "https://docs.pagenary.com/pages/search-and-data.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/search-and-data.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "SEO Strategy",
28
28
  "description": "Metadata, hash-routing considerations, and discoverability.",
29
29
  "url": "https://docs.pagenary.com/pages/seo-strategy.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/seo-strategy.html"
@@ -27,7 +27,7 @@
27
27
  "headline": "One System, Many Styles",
28
28
  "description": "Heroes, reveal-on-scroll, accordions, and scroll-snap — live, in the docbase.",
29
29
  "url": "https://docs.pagenary.com/pages/showcase-gallery.html",
30
- "dateModified": "2026-06-27",
30
+ "dateModified": "2026-06-28",
31
31
  "mainEntityOfPage": {
32
32
  "@type": "WebPage",
33
33
  "@id": "https://docs.pagenary.com/pages/showcase-gallery.html"