@manototh/do11y 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/do11y.js CHANGED
@@ -9,7 +9,7 @@ var Do11yBundle = (function(exports) {
9
9
  * Standard attrs from https://opentelemetry.io/docs/specs/semconv/.
10
10
  * Custom do11y attrs use the `browser.do11y.*` namespace.
11
11
  */
12
- const VERSION = "0.2.1";
12
+ const VERSION = "0.2.2";
13
13
  const ATTR_SESSION_ID = "session.id";
14
14
  const ATTR_URL_PATH = "url.path";
15
15
  const ATTR_URL_FRAGMENT = "url.fragment";
@@ -1198,7 +1198,7 @@ var Do11yBundle = (function(exports) {
1198
1198
  const OTEL_CDN_BASE = "https://esm.sh/";
1199
1199
  /** Version of the OTel SDK packages loaded from the CDN.
1200
1200
  * Keep in sync with the `@opentelemetry/*` peer/dev dependencies in package.json. */
1201
- const OTEL_SDK_VERSION = "0.221.0";
1201
+ const OTEL_SDK_VERSION = "0.222.0";
1202
1202
  /** Emit a single event through the OTel Logger. */
1203
1203
  function emitOtlpRecord(eventName, event, eventTime) {
1204
1204
  if (!_otelLogger) return;
@@ -1590,7 +1590,7 @@ var Do11yBundle = (function(exports) {
1590
1590
  return !!config.endpoint;
1591
1591
  },
1592
1592
  getQueueSize: () => getQueueLength(),
1593
- version: "0.2.1",
1593
+ version: "0.2.2",
1594
1594
  destroy: () => destroy()
1595
1595
  };
1596
1596
  //#endregion
package/dist/do11y.min.js CHANGED
@@ -1 +1 @@
1
- var Do11yBundle=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let t=`0.2.1`,n=`browser.do11y.referrer_category`,r=`browser.do11y.ai_platform`,i=`browser.do11y.scroll.threshold`,a=`browser.do11y.scroll.percent`,o=`browser.do11y.expand.summary`,s=`browser.do11y.expand.action`,c=`browser.do11y.expand.section`,l=`browser.do11y.scroll_depth`,u=`browser.do11y.search_opened`,d=`browser.do11y.expand_collapse`,f=[`searchSelector`,`copyButtonSelector`,`codeBlockSelector`,`navigationSelector`,`footerSelector`,`contentSelector`,`tabContainerSelector`,`tocSelector`,`feedbackSelector`];function p(){let e={};return{allow(t,n,r,a){let o=Date.now(),s=n[`browser.do11y.scroll.threshold`]!==null&&n[`browser.do11y.scroll.threshold`]!==void 0?`${t}:${String(n[i])}`:t;return r>0&&e[s]&&o-e[s]<r?(a&&console.log(`[Do11y] Rate limited:`,t),!1):(e[s]=o,!0)},reset(){for(let t of Object.keys(e))delete e[t]}}}let m={mintlify:{searchSelector:`#search-bar-entry, #search-bar-entry-mobile, [class*="search"]`,copyButtonSelector:`button[class*="copy"], button[aria-label*="copy" i]`,codeBlockSelector:`pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], #navbar, #sidebar, [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, article, [role="main"], [class*="content"]`,tabContainerSelector:`tabs, [role="tablist"], [class*="tab"]`,tocSelector:`#table-of-contents, [data-testid="table-of-contents"], [class*="table-of-contents"], [class*="toc"]`,feedbackSelector:`feedback-toolbar, #feedback-thumbs-up, #feedback-thumbs-down, [class*="feedback"], [class*="helpful"]`},docusaurus:{searchSelector:`.DocSearch, .DocSearch-Button`,copyButtonSelector:`button.clean-btn[aria-label*="copy" i], button[class*="copyButton"]`,codeBlockSelector:`pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], .navbar, .sidebar, [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, article, [role="main"], [class*="content"]`,tabContainerSelector:`.tabs[role="tablist"], [class*="tabs"]`,tocSelector:`.table-of-contents, [class*="toc"]`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},nextra:{searchSelector:`.nextra-search input, input[placeholder*="search" i], button[aria-label*="search" i]`,copyButtonSelector:`button[class*="copy"], button[aria-label*="copy" i], button[title*="copy" i]`,codeBlockSelector:`pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, article, [role="main"], [class*="content"]`,tabContainerSelector:`[role="tablist"], [class*="tab"]`,tocSelector:`.nextra-toc, [class*="toc"]`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},"mkdocs-material":{searchSelector:`.md-search__input`,copyButtonSelector:`.md-clipboard, .md-code__button[title="Copy to clipboard"]`,codeBlockSelector:`pre, code, [class*="code"]`,navigationSelector:`nav, [role="navigation"], .md-nav, .md-sidebar`,footerSelector:`footer, [role="contentinfo"], .md-footer`,contentSelector:`main, article, [role="main"], .md-content`,tabContainerSelector:`.tabbed-labels, .md-typeset .tabbed-set`,tocSelector:`.md-sidebar--secondary .md-nav, [class*="toc"]`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},vitepress:{searchSelector:`.VPNavBarSearch button, .VPNavBarSearchButton, #local-search`,copyButtonSelector:`button.copy, .vp-code-copy, button.copy[title*="Copy"]`,codeBlockSelector:`div[class*="language-"], pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], .VPNav, .VPSidebar, [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], .VPFooter, [class*="footer"]`,contentSelector:`main, article, [role="main"], .VPContent, [class*="content"]`,tabContainerSelector:`.vp-code-group .tabs, [role="tablist"]`,tocSelector:`.VPDocAsideOutline, .VPLocalNavOutlineDropdown, a.outline-link`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},starlight:{searchSelector:`site-search button[data-open-modal], sl-doc-search .DocSearch-Button, button[aria-label*="search" i]`,copyButtonSelector:`.expressive-code .copy button, .copy button[data-code]`,codeBlockSelector:`.expressive-code pre, pre`,navigationSelector:`nav, [role="navigation"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, .sl-markdown-content, [role="main"]`,tabContainerSelector:`starlight-tabs [role="tablist"], [role="tablist"]`,tocSelector:`.right-sidebar-panel, starlight-toc, mobile-starlight-toc`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},docsy:{searchSelector:`.td-search input, .td-search__input, #docsearch-0, #docsearch-1`,copyButtonSelector:`button[aria-label*="copy" i], button[title*="copy" i], .td-click-to-copy`,codeBlockSelector:`.highlight, pre.chroma, pre`,navigationSelector:`nav, [role="navigation"], .td-sidebar, .td-navbar, [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], .td-footer, [class*="footer"]`,contentSelector:`main, article, [role="main"], .td-content, [class*="content"]`,tabContainerSelector:`.nav-tabs[role="tablist"], [role="tablist"], .tab-content`,tocSelector:`.td-toc, nav[id="TableOfContents"], [class*="toc"]`,feedbackSelector:`.feedback--answer, [class*="feedback"], [class*="helpful"]`}};function ee(e){let t=m[e.framework];t?f.forEach(n=>{e[n]||(e[n]=t[n])}):e.framework!==`custom`&&e.debug&&console.warn(`[Do11y] Unknown framework "${e.framework}". Falling back to generic selectors. Supported: `+Object.keys(m).join(`, `)+`, custom`);let n=m.mintlify;n&&f.forEach(t=>{e[t]||(e[t]=n[t])})}function h(e){if(!e||typeof e!=`string`)return null;try{return document.querySelector(e),e}catch{return null}}function te(e){if(e.respectDNT&&(navigator.doNotTrack===`1`||navigator.doNotTrack===`yes`||window.doNotTrack===`1`))return e.debug&&console.log(`[Do11y] Disabled: Do Not Track is enabled`),!0;if(e.allowedDomains&&e.allowedDomains.length>0){let t=window.location.hostname;if(!e.allowedDomains.some(e=>t===e||t.endsWith(`.`+e)))return e.debug&&console.log(`[Do11y] Disabled: Domain not allowed:`,t),!0}return!1}function g(e){if(typeof e.className==`string`)return e.className;let t=e.className;return t&&typeof t.baseVal==`string`?t.baseVal:``}function ne(e){let t=e.match(/(?:^|\s)language-([\w-]+)(?:\s|$)/);return t?t[1]:null}function re(e){if(!e)return`unknown`;let t=e;for(let e=0;t&&e<12;e++,t=t.parentElement){for(let e of[`language`,`data-language`,`data-lang`,`data-code-lang`]){let n=t.getAttribute(e);if(n)return n}let e=ne(g(t));if(e)return e;let n=t.querySelector(`:scope > span.lang`)?.textContent?.trim();if(n)return n;let r=t.querySelector(`[data-language], [data-lang], [data-code-lang], [class*="language-"], [language]`);if(r){let e=r.getAttribute(`language`)??r.getAttribute(`data-language`)??r.getAttribute(`data-lang`)??r.getAttribute(`data-code-lang`)??ne(g(r));if(e)return e}}return`unknown`}function ie(e){if(e.startsWith(`#`))return e;let t=e.indexOf(`#`);if(t===-1)return null;let n=e.slice(0,t);return!n||n===window.location.pathname||n===`${window.location.pathname}${window.location.search}`?e.slice(t):null}function ae(e,t){let n=h(t.tocSelector);if(n){let t=e.closest(n);if(t&&t!==e&&t.tagName!==`A`)return t}for(let t of[`.VPDocAsideOutline`,`.VPLocalNavOutlineDropdown`,`.table-of-contents`,`.right-sidebar-panel`,`starlight-toc`,`[class*="TableOfContents"]`,`[class*="page-outline"]`,`[class*="toc"]`,`nav[id="TableOfContents"]`]){let n=e.closest(t);if(n&&n!==e&&n.tagName!==`A`)return n}return e.parentElement&&e.parentElement!==document.body?e.parentElement:null}function _(e){let t=e;for(;t&&t!==document.body;){let e=t.previousElementSibling;for(;e;){if(/^H[1-6]$/.test(e.tagName))return e.textContent?.trim().substring(0,100)??null;let t=e.querySelectorAll(`h1, h2, h3, h4, h5, h6`);if(t.length>0)return t[t.length-1].textContent?.trim().substring(0,100)??null;e=e.previousElementSibling}t=t.parentElement}return null}function v(e,t){if(!e||typeof e!=`string`)return null;let n=t??100,r=e;return r=r.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,`[email]`),r=r.replace(/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g,`[phone]`),r=r.replace(/\b\d{3}-\d{2}-\d{4}\b/g,`[redacted]`),r=r.replace(/\b(?:\d[ -]?){13,19}\b/g,`[card]`),r=r.replace(/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,`[token]`),r=r.replace(/\bxa[a-z]{2}-[A-Za-z0-9_-]{20,}/g,`[token]`),r=r.replace(/\b[0-9a-fA-F]{32,}\b/g,`[redacted]`),r.trim().substring(0,n)}function oe(){let e=window.innerWidth;return e<640?`mobile`:e<1024?`tablet`:e<1440?`desktop`:`large-desktop`}function se(){let e=navigator.userAgent;return e.includes(`Firefox`)?`Firefox`:e.includes(`Edg`)?`Edge`:e.includes(`Chrome`)?`Chrome`:e.includes(`Safari`)?`Safari`:`Other`}function ce(){let e=navigator.userAgent;return/Mobile|Android|iPhone|iPad/.test(e)?/iPad|Tablet/.test(e)?`tablet`:`mobile`:`desktop`}function le(){return{"browser.do11y.viewport_category":oe(),"browser.family":se(),"device.type":ce(),"browser.language":(navigator.language||``).split(`-`)[0]||`unknown`,"browser.do11y.timezone_offset":new Date().getTimezoneOffset()/60}}let ue=[{match:`chatgpt`,platform:`ChatGPT`},{match:`chat.com`,platform:`ChatGPT`},{match:`openai`,platform:`ChatGPT`},{match:`perplexity`,platform:`Perplexity`},{match:`claude.ai`,platform:`Claude`},{match:`anthropic`,platform:`Claude`},{match:`gemini`,platform:`Gemini`},{match:`copilot`,platform:`Copilot`},{match:`deepseek`,platform:`DeepSeek`},{match:`meta.ai`,platform:`Meta AI`},{match:`grok`,platform:`Grok`},{match:`x.ai`,platform:`Grok`},{match:`mistral`,platform:`Mistral`},{match:`you.com`,platform:`You.com`},{match:`phind`,platform:`Phind`}];function de(e){if(!e||e===`direct`)return{referrerCategory:`direct`,aiPlatform:null};if(e===`internal`)return{referrerCategory:`internal`,aiPlatform:null};if(e===`unknown`)return{referrerCategory:`unknown`,aiPlatform:null};let t=e.toLowerCase();for(let e of ue)if(t.indexOf(e.match)!==-1)return{referrerCategory:`ai`,aiPlatform:e.platform};return/google\.|bing\.|baidu\.|yandex\.|duckduckgo\.|yahoo\./.test(t)?{referrerCategory:`search-engine`,aiPlatform:null}:/github\.|gitlab\.|bitbucket\./.test(t)?{referrerCategory:`code-host`,aiPlatform:null}:/stackoverflow\.|stackexchange\.|reddit\.|news\.ycombinator\./.test(t)?{referrerCategory:`community`,aiPlatform:null}:/twitter\.|x\.com|linkedin\.|facebook\.|threads\.net/.test(t)?{referrerCategory:`social`,aiPlatform:null}:{referrerCategory:`other`,aiPlatform:null}}function fe(){try{if(!document.referrer)return`direct`;let e=new URL(document.referrer);return e.hostname===window.location.hostname?`internal`:e.hostname}catch{return`unknown`}}function pe(){return{"url.path":window.location.pathname,"url.fragment":window.location.hash||null,"browser.do11y.url.has_params":window.location.search?`has_params`:null,"browser.do11y.page_title":v(document.title,150)}}function me(){if(window.crypto&&typeof window.crypto.randomUUID==`function`)return window.crypto.randomUUID();if(window.crypto&&typeof window.crypto.getRandomValues==`function`){let e=new Uint8Array(16);window.crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return t.slice(0,8)+`-`+t.slice(8,12)+`-`+t.slice(12,16)+`-`+t.slice(16,20)+`-`+t.slice(20)}return`no-crypto-00-0000-0000-000000000000`}function he(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.startTime==`string`&&Array.isArray(t.pageSequence)&&typeof t.pageCount==`number`}function y(){let e=null;try{let t=sessionStorage.getItem(`do11y_session`);if(t){let n=JSON.parse(t);he(n)&&(e=n)}}catch{}return e||(e={id:me(),startTime:new Date().toISOString(),pageSequence:[],pageCount:0,referrerCategory:null,aiPlatform:null},b(e)),e}function b(e){try{sessionStorage.setItem(`do11y_session`,JSON.stringify(e))}catch{}}function ge(e){let t=y();return t.pageCount++,t.pageSequence.push({path:e,timestamp:new Date().toISOString(),index:t.pageCount}),t.pageSequence.length>50&&(t.pageSequence=t.pageSequence.slice(-50)),b(t),t}let x=new Set,S=null;function _e(e){let t=e;for(;t&&t!==document.body&&t!==document.documentElement;){let e=window.getComputedStyle(t).overflowY;if((e===`auto`||e===`scroll`)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}return null}function C(e,t){let n,r,o;S&&S.scrollHeight>S.clientHeight?(n=S.scrollTop,r=S.scrollHeight,o=S.clientHeight):(n=window.scrollY||document.documentElement.scrollTop,r=document.documentElement.scrollHeight,o=window.innerHeight);let s=r-o;if(s<=0){e.scrollThresholds.forEach(e=>{x.has(e)||(x.add(e),t(l,{[i]:e,[a]:100}))});return}let c=Math.round(n/s*100);e.scrollThresholds.forEach(e=>{c>=e&&!x.has(e)&&(x.add(e),t(l,{[i]:e,[a]:c}))})}function ve(e,t){if(!e.trackScrollDepth)return;if(e.contentSelector){let t=document.querySelector(e.contentSelector);t&&(S=_e(t))}let n=!1;function r(){n||=(window.requestAnimationFrame(()=>{C(e,t),n=!1}),!0)}if(window.addEventListener(`scroll`,r),S&&(S.addEventListener(`scroll`,r),e.debug)){let e=S;console.log(`[do11y] Using container-based scroll tracking:`,e.className||e.tagName)}C(e,t)}function ye(){x=new Set}function be(){return x}function w(e,t,n){e(`browser.do11y.section_visible`,{"browser.do11y.section.heading":v(t.textContent?.trim()??``,100),"browser.do11y.section.heading_level":parseInt(t.tagName.charAt(1),10),"browser.do11y.section.visible_seconds":Math.round(n/1e3)})}let T=null,E={};function xe(e,t){if(!e.trackSectionVisibility||typeof IntersectionObserver>`u`)return;let n=e.sectionVisibleThreshold*1e3;T=new IntersectionObserver(e=>{e.forEach(e=>{let r=e.target.getAttribute(`data-do11y-section-id`);if(r)if(e.isIntersecting){if(!E[r]){let i={start:Date.now(),reported:!1,timeoutId:null};i.timeoutId=setTimeout(()=>{E[r]&&!E[r].reported&&(w(t,e.target,n),E[r].reported=!0)},n),E[r]=i}}else{if(E[r]&&(E[r].timeoutId&&clearTimeout(E[r].timeoutId),!E[r].reported)){let i=Date.now()-E[r].start;i>=n&&(w(t,e.target,i),E[r].reported=!0)}delete E[r]}})},{threshold:.5}),D()}function D(){T&&document.querySelectorAll(`h2, h3`).forEach((e,t)=>{e.setAttribute(`data-do11y-section-id`,`section-`+t),T.observe(e)})}function Se(e,t){if(!T)return;let n=Date.now(),r=e.sectionVisibleThreshold*1e3;Object.keys(E).forEach(e=>{let i=E[e];if(i&&!i.reported){i.timeoutId&&clearTimeout(i.timeoutId);let a=n-i.start;if(a>=r){let n=typeof CSS<`u`&&typeof CSS.escape==`function`?CSS.escape(e):e.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~ ]/g,`\\$&`),r=document.querySelector(`[data-do11y-section-id="`+n+`"]`);r&&w(t,r,a)}}}),E={}}function Ce(){T&&=(E&&Object.keys(E).length>0&&(Object.keys(E).forEach(e=>{let t=E[e];t&&!t.reported&&t.timeoutId&&clearTimeout(t.timeoutId)}),E={}),T.disconnect(),null)}let O=Date.now(),k=Date.now(),A=0,j=!0,M=!1;function N(e,t,i){if(M)return;M=!0,j&&(A+=Date.now()-k);let a=Date.now()-O,o=a>0?A/a:0,s=0;be().forEach(e=>{e>s&&(s=e)}),Se(e,t);let c=y();t(`browser.do11y.page_exit`,{"browser.do11y.page_exit.total_time_seconds":Math.round(a/1e3),"browser.do11y.page_exit.active_time_seconds":Math.round(A/1e3),"browser.do11y.page_exit.engagement_ratio":Math.round(o*100)/100,"browser.do11y.page_exit.max_scroll_depth":s,[n]:c.referrerCategory,[r]:c.aiPlatform}),i?.()}function we(e,t){document.addEventListener(`visibilitychange`,()=>{document.hidden?j&&=(A+=Date.now()-k,!1):(k=Date.now(),j=!0)}),window.addEventListener(`beforeunload`,()=>{N(e,t)})}function Te(){O=Date.now(),k=Date.now(),A=0,j=!0,M=!1}function Ee(){M=!1}function P(e,t){Ee();let i=ge(window.location.pathname),a=fe(),o=de(a);i.pageCount===1&&(i.referrerCategory=o.referrerCategory,i.aiPlatform=o.aiPlatform,b(i)),t(`browser.do11y.page_view`,{"browser.do11y.referrer_domain":a,[n]:o.referrerCategory,[r]:o.aiPlatform,"browser.do11y.is_first_page":i.pageCount===1,"browser.do11y.previous_path":i.pageSequence.length>1?i.pageSequence[i.pageSequence.length-2].path:null})}function De(e,t){return e.closest(t.navigationSelector)?`navigation`:e.closest(t.footerSelector)?`footer`:e.closest(t.contentSelector)?`content`:`other`}function Oe(){try{let e=new Map;document.querySelectorAll(`a[href]`).forEach(t=>{let n=t.getAttribute(`href`)??``,r=e.get(n)??[];r.push(t),e.set(n,r)}),e.forEach(e=>{e.forEach((e,t)=>{e.setAttribute(`data-do11y-link-idx`,String(t+1))})})}catch{}}function ke(e,t){Oe(),document.addEventListener(`click`,n=>{let r=n.target.closest(`a`);if(!r)return;let i=r.getAttribute(`href`);if(!i)return;let a=`other`,o=null;try{if(i.startsWith(`#`))a=`anchor`;else if(i.startsWith(`/`)||i.startsWith(`./`)||i.startsWith(`../`))a=`internal`;else if(i.startsWith(`http`)){let e=new URL(i);e.hostname===window.location.hostname?a=`internal`:(a=`external`,o=e.hostname)}else i.startsWith(`mailto:`)&&(a=`email`)}catch{}if(a===`internal`&&!e.trackInternalLinks||a===`external`&&!e.trackOutboundLinks)return;let s=parseInt(r.getAttribute(`data-do11y-link-idx`)??`1`,10);t(`browser.do11y.link_click`,{"browser.do11y.link.type":a,"browser.do11y.link.target_url":i,"browser.do11y.link.target_domain":o,"browser.do11y.link.text":v(r.textContent,100),"browser.do11y.link.context":De(r,e),"browser.do11y.link.section":v(_(r),100),"browser.do11y.link.index":s})},!0)}function Ae(e,t){e.trackSearch&&(document.addEventListener(`click`,n=>{n.target.closest(e.searchSelector)&&t(u,{})},!0),document.addEventListener(`keydown`,n=>{if((n.metaKey||n.ctrlKey)&&n.key===`k`){if(!document.querySelector(e.searchSelector))return;t(u,{"browser.do11y.search.trigger":`keyboard`})}}))}function je(e){try{document.querySelectorAll(e.codeBlockSelector).forEach((e,t)=>{e.setAttribute(`data-do11y-code-idx`,String(t+1))})}catch{}}function Me(e,t){e.trackCopy&&(je(e),document.addEventListener(`click`,n=>{let r=n.target.closest(e.copyButtonSelector);if(r){let n=r.closest(`[class*="language-"], [language]`)??r.closest(e.codeBlockSelector)??r.closest(`.expressive-code`)?.querySelector(`pre`)??r.closest(`div, section`)?.querySelector(`pre`)??r.parentElement?.querySelector(`pre`)??null,i=re((n?n.tagName===`PRE`?n.querySelector(`code`):n.querySelector(`code[class*="language-"], code[language]`)??n.querySelector(`code`):null)??n??r),a=parseInt(n?.getAttribute(`data-do11y-code-idx`)??`1`,10);t(`browser.do11y.code_copied`,{"browser.do11y.code.language":i,"browser.do11y.code.section":v(_(n??r),100),"browser.do11y.code.index":a})}},!0))}function Ne(e,t){e.trackTabSwitches&&document.addEventListener(`click`,n=>{let r=`[role="tab"], .tabs button, .tabs a, .tabbed-labels label`,i=h(e.tabContainerSelector);i&&(r+=`, `+i+` button, `+i+` a, `+i+` label`);let a=n.target.closest(r);if(!a||a.getAttribute(`aria-selected`)===`true`||a.classList.contains(`active`)||a.classList.contains(`is-active`))return;let o=v(a.textContent,50);if(!o)return;let s=v(_(a),100);t(`browser.do11y.tab_switch`,{"browser.do11y.tab.label":o,"browser.do11y.tab.group":s,"browser.do11y.tab.is_default":!1})})}function Pe(e,t){e.trackTocClicks&&document.addEventListener(`click`,n=>{let r=n.target.closest(`a`);if(!r)return;let i=ae(r,e);if(!i)return;let a=r.getAttribute(`href`),o=a?ie(a):null;if(!o)return;let s=v(r.textContent,100),c=null;try{let e=o.slice(1),t=document.getElementById(e);t&&/^H[1-6]$/.test(t.tagName)&&(c=parseInt(t.tagName.charAt(1),10))}catch{}let l=i.querySelectorAll(`a[href*="#"]`),u=1;for(let e=0;e<l.length;e++)if(l[e]===r){u=e+1;break}t(`browser.do11y.toc_click`,{"browser.do11y.toc.heading":s,"browser.do11y.toc.heading_level":c,"browser.do11y.toc.position":u})},!0)}function Fe(e,t){e.trackFeedback&&document.addEventListener(`click`,n=>{let r=n.target.closest(`button, [role="button"], a`);if(!r||!r.closest(h(e.feedbackSelector)??`[class*="feedback"], [class*="helpful"], [class*="rating"], [class*="was-this"], [data-feedback]`))return;let i=(r.textContent??``).trim().toLowerCase(),a=(r.getAttribute(`aria-label`)??``).toLowerCase(),o=(r.getAttribute(`title`)??``).toLowerCase(),s=r.getAttribute(`data-value`)??r.getAttribute(`data-md-value`)??r.getAttribute(`data-feedback`),c=s&&/^[\w\s.,!?-]{1,50}$/.test(s)?s:null,l=null;c?l=c:/\byes\b|👍|thumbs.?up|helpful/i.test(i+` `+a+` `+o)?l=`yes`:/\bno\b|👎|thumbs.?down|not.?helpful/i.test(i+` `+a+` `+o)&&(l=`no`),l&&t(`browser.do11y.feedback`,{"browser.do11y.feedback.rating":l})})}function Ie(e,t){e.trackExpandCollapse&&(document.addEventListener(`toggle`,e=>{let n=e.target;if(n.tagName!==`DETAILS`)return;let r=n.querySelector(`summary`),i=v(r?r.textContent:``,100);t(d,{[o]:i,[s]:n.open?`expand`:`collapse`,[c]:v(_(n),100)})},!0),document.addEventListener(`click`,e=>{let n=e.target.closest(`[aria-expanded], [class*="accordion"] button, [class*="collapsible"] button`);if(!n||n.closest(`details`)||n.closest(`nav, [role="navigation"], header`))return;let r=n.getAttribute(`aria-expanded`)===`true`;t(d,{[o]:v(n.textContent,100),[s]:r?`collapse`:`expand`,[c]:v(_(n),100)})}))}let F=[],I=null,Le=p(),L=!1,R=null,z=[],B=null,V=!1,H=!1;function U(e){L=e}function W(){return L}function Re(){return F.length}function ze(e,n,r){if(L||!Le.allow(n,r,e.rateLimitMs,e.debug))return;let i=y(),a=new Date,o={_time:a.toISOString(),eventName:n,"browser.do11y.version":t,"session.id":i.id,"browser.do11y.session_page_count":i.pageCount,...pe(),...le(),...r};if(e.debug&&console.log(`[Do11y] Event queued:`,n,o),e.destination===`otlp`){if(R){Ue(n,o,a);return}if(V){e.debug&&console.warn(`[Do11y] OTel SDK unavailable; dropping event:`,n);return}z.push(o),z.length>500&&(z=z.slice(-500),console.warn(`[Do11y] OTLP pending buffer capped at 500 events — oldest events dropped`)),Ge(e);return}F.push(o),F.length>500&&(F=F.slice(-500),console.warn(`[Do11y] Event queue capped at 500 events — oldest events dropped`)),F.length>=e.maxBatchSize?Y(e):Be(e)}function Be(e){I||=setTimeout(()=>Y(e),e.flushInterval)}function Ve(e,t=!1){return G(e,t)}function He(e){try{return new URL(e).hostname.endsWith(`.supabase.co`)}catch{return!1}}function G(e,t=!1){try{let n=new URL(e),r=n.hostname,i=r===`localhost`||r===`127.0.0.1`||r===`::1`||/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r);return t&&i&&n.protocol===`http:`?!0:!(n.protocol!==`https:`||i)}catch{return!1}}function K(e){return e.destination===`supabase`?e.supabaseUrl?Ve(e.supabaseUrl,e.debug)?(e.debug&&!H&&!He(e.supabaseUrl)&&(H=!0,console.warn(`[Do11y] Non-hosted Supabase URL. Ensure you configure your instance's REST endpoint and CORS settings.`)),!e.supabaseKey||typeof e.supabaseKey!=`string`||e.supabaseKey.length<10?(e.debug&&console.warn(`[Do11y] Invalid or missing Supabase publishable key`),!1):/^[a-zA-Z0-9_-]+$/.test(e.supabaseTable)?!0:(e.debug&&console.warn(`[Do11y] Invalid table name`),!1)):(e.debug&&console.warn(`[Do11y] Invalid Supabase URL. Must be a valid HTTPS URL (HTTP is allowed for localhost/private addresses when debug is enabled).`),!1):(e.debug&&console.warn(`[Do11y] No Supabase URL configured`),!1):e.destination===`http`?e.endpoint?G(e.endpoint,e.debug)?!0:(e.debug&&console.warn(`[Do11y] Invalid HTTP endpoint. Must be HTTPS and not a private address.`),!1):(e.debug&&console.warn(`[Do11y] No HTTP endpoint configured`),!1):e.destination===`otlp`?e.otelSdkEndpoint?!0:(e.debug&&console.warn(`[Do11y] No OTLP endpoint configured`),!1):(e.debug&&console.warn(`[Do11y] Unknown destination:`,e.destination),!1)}let q=`0.221.0`;function Ue(e,t,n){if(!R)return;let r={...t};delete r._time,delete r.eventName,R.emit({eventName:e,severityNumber:9,timestamp:n.getTime(),attributes:r,body:``})}function We(){if(!R||z.length===0)return;let e=z;z=[];for(let t of e)Ue(t.eventName,t,new Date(t._time))}function Ge(e){R||B||V||(B=Ke(e).catch(e=>{V=!0,z=[],console.warn(`[Do11y] OTel SDK initialization failed; buffered events dropped:`,e)}).finally(()=>{B=null}))}async function Ke(e){if(R)return;let n=`https://esm.sh/`,r=async e=>import(e),i=await r(`${n}@opentelemetry/api-logs@${q}`),a=await r(`${n}@opentelemetry/sdk-logs@${q}`),o=await r(`${n}@opentelemetry/exporter-logs-otlp-http@${q}`),s={"service.name":e.otelSdkServiceName||`do11y`,"service.version":t,"telemetry.sdk.name":`do11y`,"telemetry.sdk.language":`webjs`,"telemetry.sdk.version":t,...e.otelSdkResourceAttributes},c=new a.LoggerProvider({resource:{attributes:s},processors:[new a.BatchLogRecordProcessor({exporter:new o.OTLPLogExporter({url:e.otelSdkEndpoint.replace(/\/$/,``)+`/v1/logs`,headers:e.otelSdkHeaders})})]});i.logs.setGlobalLoggerProvider(c),R=c.getLogger(`do11y`),We(),e.debug&&console.log(`[Do11y] OTel SDK initialized with endpoint:`,e.otelSdkEndpoint)}function J(e,t){if(t.destination===`supabase`){let n=t.supabaseUrl.replace(/\/$/,``)+`/rest/v1/`+t.supabaseTable,r=t.bodyTransform??(e=>e.map(e=>({payload:e})));return{url:n,headers:{apikey:t.supabaseKey,Authorization:`Bearer `+t.supabaseKey,"Content-Type":`application/json`,Prefer:`return=minimal`},body:JSON.stringify(r(e))}}let n=t.bodyTransform??(e=>e);return{url:t.endpoint,headers:{"Content-Type":`application/json`,...t.headers},body:JSON.stringify(n(e))}}function qe(e){try{return new URL(e).origin!==window.location.origin}catch{return!1}}function Je(e,t,n,r){let i=qe(e.url);r.debug&&i&&console.log(`[Do11y] Cross-origin request to`,new URL(e.url).origin,`- requires CORS headers on the server`),fetch(e.url,{method:`POST`,headers:e.headers,body:e.body,keepalive:!0,mode:i?`cors`:`same-origin`}).then(e=>{if(e.ok){r.debug&&console.log(`[Do11y] Flushed`,t.length,`events`);return}if(n>0&&(e.status>=500||e.status===429)){r.debug&&console.log(`[Do11y] Retrying after error:`,e.status),F=t.concat(F),setTimeout(()=>Y(r,n-1),r.retryDelay*(r.maxRetries-n+1));return}r.debug&&e.text().then(t=>{let n=`[Do11y] Ingest failed: ${e.status}`;e.status===0&&e.type===`opaque`?console.error(n,`- CORS error: server did not return Access-Control-Allow-Origin`):console.error(n,t)}).catch(()=>{})}).catch(e=>{if(n>0){if(r.debug){let t=i?` (this may be a CORS issue — try using an OTel Collector proxy)`:``;console.log(`[Do11y] Network error, retrying:`,e.message+t)}F=t.concat(F),setTimeout(()=>Y(r,n-1),r.retryDelay*(r.maxRetries-n+1))}else r.debug&&console.error(`[Do11y] Failed to send events:`,e.message)})}function Y(e,t){if(I&&=(clearTimeout(I),null),e.destination===`otlp`){F.length>0&&(e.debug&&console.warn(`[Do11y] Dropping `+F.length+` queued events (OTLP mode has no HTTP transport)`),F=[]);return}if(F.length===0||!K(e))return;let n=typeof t==`number`?t:e.maxRetries,r=F.slice();F=[],Je(J(r,e),r,n,e)}function Ye(e){if(e.destination===`otlp`||F.length===0||!K(e))return;let t=F;F=[];let n=J(t,e);try{fetch(n.url,{method:`POST`,headers:n.headers,body:n.body,keepalive:!0})}catch{}e.debug&&console.log(`[Do11y] Sync flushed`,t.length,`events`)}function Xe(){I&&=(clearTimeout(I),null)}let X={destination:`supabase`,supabaseUrl:``,supabaseKey:``,supabaseTable:`do11y_events`,endpoint:``,headers:{},bodyTransform:void 0,otelSdkEndpoint:``,otelSdkHeaders:{},otelSdkServiceName:`do11y`,otelSdkResourceAttributes:{},debug:!1,flushInterval:5e3,maxBatchSize:10,trackOutboundLinks:!0,trackInternalLinks:!0,trackScrollDepth:!0,scrollThresholds:[25,50,75,90],allowedDomains:null,respectDNT:!0,maxRetries:2,retryDelay:1e3,rateLimitMs:100,framework:`mintlify`,trackSectionVisibility:!0,sectionVisibleThreshold:3,trackSearch:!0,trackCopy:!0,trackTabSwitches:!0,trackTocClicks:!0,trackExpandCollapse:!0,trackFeedback:!0,tabContainerSelector:null,tocSelector:null,feedbackSelector:null,searchSelector:null,copyButtonSelector:null,codeBlockSelector:null,navigationSelector:null,footerSelector:null,contentSelector:null,trackSpaPathChanges:!1,sessionAttributes:!0},Ze=!!window.__do11yInitialized;window.__do11yInitialized=!0;let Qe=window.self!==window.top;Qe&&!Ze&&(window.__do11yInitialized=!1);let Z=null,Q=null;function $e(){let e=X,t=window.Do11yConfig;if(t&&typeof t==`object`){for(let n in X)if(Object.prototype.hasOwnProperty.call(t,n)){let r=t[n];r!==void 0&&(e[n]=r)}}let n=document.querySelector(`meta[name="do11y-destination"]`);if(n){let e=n.getAttribute(`content`);(e===`supabase`||e===`http`||e===`otlp`)&&(X.destination=e)}let r=document.querySelector(`meta[name="do11y-url"]`);r&&(X.supabaseUrl=r.getAttribute(`content`)??X.supabaseUrl);let i=document.querySelector(`meta[name="do11y-key"]`);i&&(X.supabaseKey=i.getAttribute(`content`)??X.supabaseKey);let a=document.querySelector(`meta[name="do11y-table"]`);a&&(X.supabaseTable=a.getAttribute(`content`)??X.supabaseTable);let o=document.querySelector(`meta[name="do11y-endpoint"]`);o&&(X.endpoint=o.getAttribute(`content`)??X.endpoint);let s=document.querySelector(`meta[name="do11y-otlp-endpoint"]`);s&&(X.otelSdkEndpoint=s.getAttribute(`content`)??X.otelSdkEndpoint);let c=document.querySelector(`meta[name="do11y-otlp-headers"]`);if(c)try{let e=JSON.parse(c.getAttribute(`content`)??`{}`);typeof e==`object`&&e&&(X.otelSdkHeaders=e)}catch{}let l=document.querySelector(`meta[name="do11y-debug"]`);l&&l.getAttribute(`content`)===`true`&&(X.debug=!0);let u=document.querySelector(`meta[name="do11y-domains"]`);if(u){let e=u.getAttribute(`content`);e&&(X.allowedDomains=e.split(`,`).map(e=>e.trim()))}let d=document.querySelector(`meta[name="do11y-framework"]`);if(d){let e=d.getAttribute(`content`);e&&[`mintlify`,`docusaurus`,`nextra`,`mkdocs-material`,`vitepress`,`starlight`,`docsy`,`custom`].includes(e)?X.framework=e:e&&X.debug&&console.warn(`[Do11y] Unknown framework in meta tag: "`+e+`". Using default: `+X.framework)}if(ee(X),X.debug&&console.log(`[Do11y] Initializing with config:`,{destination:X.destination,framework:X.framework,allowedDomains:X.allowedDomains,respectDNT:X.respectDNT}),te(X)){U(!0),X.debug&&console.log(`[Do11y] Tracking disabled`);return}(X.destination===`supabase`?X.supabaseKey:X.destination===`otlp`?X.otelSdkEndpoint:X.endpoint)||(console.warn(`[Do11y] No destination configured. Events will not be sent.`),X.destination===`supabase`?console.warn(`[Do11y] Add <meta name="do11y-url"> and <meta name="do11y-key"> to enable.`):X.destination===`otlp`?console.warn(`[Do11y] Add <meta name="do11y-otlp-endpoint"> to enable.`):console.warn(`[Do11y] Add <meta name="do11y-endpoint"> to enable.`));let f=(e,t)=>{ze(X,e,t)};P(X,f),ke(X,f),ve(X,f),we(X,f),Ae(X,f),Me(X,f),xe(X,f),Ne(X,f),Pe(X,f),Fe(X,f),Ie(X,f);let p=window.location.pathname,m=()=>{window.location.pathname!==p&&(p=window.location.pathname,N(X,f,()=>Y(X)),ye(),Te(),P(X,f),D(),C(X,f))};Z=new MutationObserver(m),Z.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener(`popstate`,m),Q=window.setInterval(m,200),Object.freeze(X),window.addEventListener(`beforeunload`,()=>{Q!==null&&(clearInterval(Q),Q=null),Ye(X),Xe()}),document.addEventListener(`visibilitychange`,()=>{document.hidden&&Q!==null?(clearInterval(Q),Q=null):!document.hidden&&Q===null&&X.trackSpaPathChanges&&(Q=window.setInterval(m,200))}),X.debug&&console.log(`[Do11y] Initialized successfully`)}function $(){Z&&=(Z.disconnect(),null),Q!==null&&(clearInterval(Q),Q=null),Ce(),Ye(X),Xe(),U(!0),window.__do11yInitialized=!1}return!Ze&&!Qe&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,$e):$e()),window.Do11y=window.Do11y??{getConfig:()=>({destination:X.destination,hasCredentials:X.destination===`supabase`?!!X.supabaseKey:X.destination===`otlp`?!!X.otelSdkEndpoint:!!X.endpoint,isDisabled:W(),allowedDomains:X.allowedDomains,respectDNT:X.respectDNT}),flush:()=>Y(X),isEnabled:()=>W()?!1:X.destination===`supabase`?!!X.supabaseKey:X.destination===`otlp`?!!X.otelSdkEndpoint:!!X.endpoint,getQueueSize:()=>Re(),version:`0.2.1`,destroy:()=>$()},e.destroy=$,e})({});
1
+ var Do11yBundle=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let t=`0.2.2`,n=`browser.do11y.referrer_category`,r=`browser.do11y.ai_platform`,i=`browser.do11y.scroll.threshold`,a=`browser.do11y.scroll.percent`,o=`browser.do11y.expand.summary`,s=`browser.do11y.expand.action`,c=`browser.do11y.expand.section`,l=`browser.do11y.scroll_depth`,u=`browser.do11y.search_opened`,d=`browser.do11y.expand_collapse`,f=[`searchSelector`,`copyButtonSelector`,`codeBlockSelector`,`navigationSelector`,`footerSelector`,`contentSelector`,`tabContainerSelector`,`tocSelector`,`feedbackSelector`];function p(){let e={};return{allow(t,n,r,a){let o=Date.now(),s=n[`browser.do11y.scroll.threshold`]!==null&&n[`browser.do11y.scroll.threshold`]!==void 0?`${t}:${String(n[i])}`:t;return r>0&&e[s]&&o-e[s]<r?(a&&console.log(`[Do11y] Rate limited:`,t),!1):(e[s]=o,!0)},reset(){for(let t of Object.keys(e))delete e[t]}}}let m={mintlify:{searchSelector:`#search-bar-entry, #search-bar-entry-mobile, [class*="search"]`,copyButtonSelector:`button[class*="copy"], button[aria-label*="copy" i]`,codeBlockSelector:`pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], #navbar, #sidebar, [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, article, [role="main"], [class*="content"]`,tabContainerSelector:`tabs, [role="tablist"], [class*="tab"]`,tocSelector:`#table-of-contents, [data-testid="table-of-contents"], [class*="table-of-contents"], [class*="toc"]`,feedbackSelector:`feedback-toolbar, #feedback-thumbs-up, #feedback-thumbs-down, [class*="feedback"], [class*="helpful"]`},docusaurus:{searchSelector:`.DocSearch, .DocSearch-Button`,copyButtonSelector:`button.clean-btn[aria-label*="copy" i], button[class*="copyButton"]`,codeBlockSelector:`pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], .navbar, .sidebar, [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, article, [role="main"], [class*="content"]`,tabContainerSelector:`.tabs[role="tablist"], [class*="tabs"]`,tocSelector:`.table-of-contents, [class*="toc"]`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},nextra:{searchSelector:`.nextra-search input, input[placeholder*="search" i], button[aria-label*="search" i]`,copyButtonSelector:`button[class*="copy"], button[aria-label*="copy" i], button[title*="copy" i]`,codeBlockSelector:`pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, article, [role="main"], [class*="content"]`,tabContainerSelector:`[role="tablist"], [class*="tab"]`,tocSelector:`.nextra-toc, [class*="toc"]`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},"mkdocs-material":{searchSelector:`.md-search__input`,copyButtonSelector:`.md-clipboard, .md-code__button[title="Copy to clipboard"]`,codeBlockSelector:`pre, code, [class*="code"]`,navigationSelector:`nav, [role="navigation"], .md-nav, .md-sidebar`,footerSelector:`footer, [role="contentinfo"], .md-footer`,contentSelector:`main, article, [role="main"], .md-content`,tabContainerSelector:`.tabbed-labels, .md-typeset .tabbed-set`,tocSelector:`.md-sidebar--secondary .md-nav, [class*="toc"]`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},vitepress:{searchSelector:`.VPNavBarSearch button, .VPNavBarSearchButton, #local-search`,copyButtonSelector:`button.copy, .vp-code-copy, button.copy[title*="Copy"]`,codeBlockSelector:`div[class*="language-"], pre, [class*="code"]`,navigationSelector:`nav, [role="navigation"], .VPNav, .VPSidebar, [class*="nav"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], .VPFooter, [class*="footer"]`,contentSelector:`main, article, [role="main"], .VPContent, [class*="content"]`,tabContainerSelector:`.vp-code-group .tabs, [role="tablist"]`,tocSelector:`.VPDocAsideOutline, .VPLocalNavOutlineDropdown, a.outline-link`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},starlight:{searchSelector:`site-search button[data-open-modal], sl-doc-search .DocSearch-Button, button[aria-label*="search" i]`,copyButtonSelector:`.expressive-code .copy button, .copy button[data-code]`,codeBlockSelector:`.expressive-code pre, pre`,navigationSelector:`nav, [role="navigation"], [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], [class*="footer"]`,contentSelector:`main, .sl-markdown-content, [role="main"]`,tabContainerSelector:`starlight-tabs [role="tablist"], [role="tablist"]`,tocSelector:`.right-sidebar-panel, starlight-toc, mobile-starlight-toc`,feedbackSelector:`[class*="feedback"], [class*="helpful"]`},docsy:{searchSelector:`.td-search input, .td-search__input, #docsearch-0, #docsearch-1`,copyButtonSelector:`button[aria-label*="copy" i], button[title*="copy" i], .td-click-to-copy`,codeBlockSelector:`.highlight, pre.chroma, pre`,navigationSelector:`nav, [role="navigation"], .td-sidebar, .td-navbar, [class*="sidebar"]`,footerSelector:`footer, [role="contentinfo"], .td-footer, [class*="footer"]`,contentSelector:`main, article, [role="main"], .td-content, [class*="content"]`,tabContainerSelector:`.nav-tabs[role="tablist"], [role="tablist"], .tab-content`,tocSelector:`.td-toc, nav[id="TableOfContents"], [class*="toc"]`,feedbackSelector:`.feedback--answer, [class*="feedback"], [class*="helpful"]`}};function ee(e){let t=m[e.framework];t?f.forEach(n=>{e[n]||(e[n]=t[n])}):e.framework!==`custom`&&e.debug&&console.warn(`[Do11y] Unknown framework "${e.framework}". Falling back to generic selectors. Supported: `+Object.keys(m).join(`, `)+`, custom`);let n=m.mintlify;n&&f.forEach(t=>{e[t]||(e[t]=n[t])})}function h(e){if(!e||typeof e!=`string`)return null;try{return document.querySelector(e),e}catch{return null}}function te(e){if(e.respectDNT&&(navigator.doNotTrack===`1`||navigator.doNotTrack===`yes`||window.doNotTrack===`1`))return e.debug&&console.log(`[Do11y] Disabled: Do Not Track is enabled`),!0;if(e.allowedDomains&&e.allowedDomains.length>0){let t=window.location.hostname;if(!e.allowedDomains.some(e=>t===e||t.endsWith(`.`+e)))return e.debug&&console.log(`[Do11y] Disabled: Domain not allowed:`,t),!0}return!1}function g(e){if(typeof e.className==`string`)return e.className;let t=e.className;return t&&typeof t.baseVal==`string`?t.baseVal:``}function ne(e){let t=e.match(/(?:^|\s)language-([\w-]+)(?:\s|$)/);return t?t[1]:null}function re(e){if(!e)return`unknown`;let t=e;for(let e=0;t&&e<12;e++,t=t.parentElement){for(let e of[`language`,`data-language`,`data-lang`,`data-code-lang`]){let n=t.getAttribute(e);if(n)return n}let e=ne(g(t));if(e)return e;let n=t.querySelector(`:scope > span.lang`)?.textContent?.trim();if(n)return n;let r=t.querySelector(`[data-language], [data-lang], [data-code-lang], [class*="language-"], [language]`);if(r){let e=r.getAttribute(`language`)??r.getAttribute(`data-language`)??r.getAttribute(`data-lang`)??r.getAttribute(`data-code-lang`)??ne(g(r));if(e)return e}}return`unknown`}function ie(e){if(e.startsWith(`#`))return e;let t=e.indexOf(`#`);if(t===-1)return null;let n=e.slice(0,t);return!n||n===window.location.pathname||n===`${window.location.pathname}${window.location.search}`?e.slice(t):null}function ae(e,t){let n=h(t.tocSelector);if(n){let t=e.closest(n);if(t&&t!==e&&t.tagName!==`A`)return t}for(let t of[`.VPDocAsideOutline`,`.VPLocalNavOutlineDropdown`,`.table-of-contents`,`.right-sidebar-panel`,`starlight-toc`,`[class*="TableOfContents"]`,`[class*="page-outline"]`,`[class*="toc"]`,`nav[id="TableOfContents"]`]){let n=e.closest(t);if(n&&n!==e&&n.tagName!==`A`)return n}return e.parentElement&&e.parentElement!==document.body?e.parentElement:null}function _(e){let t=e;for(;t&&t!==document.body;){let e=t.previousElementSibling;for(;e;){if(/^H[1-6]$/.test(e.tagName))return e.textContent?.trim().substring(0,100)??null;let t=e.querySelectorAll(`h1, h2, h3, h4, h5, h6`);if(t.length>0)return t[t.length-1].textContent?.trim().substring(0,100)??null;e=e.previousElementSibling}t=t.parentElement}return null}function v(e,t){if(!e||typeof e!=`string`)return null;let n=t??100,r=e;return r=r.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,`[email]`),r=r.replace(/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g,`[phone]`),r=r.replace(/\b\d{3}-\d{2}-\d{4}\b/g,`[redacted]`),r=r.replace(/\b(?:\d[ -]?){13,19}\b/g,`[card]`),r=r.replace(/eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,`[token]`),r=r.replace(/\bxa[a-z]{2}-[A-Za-z0-9_-]{20,}/g,`[token]`),r=r.replace(/\b[0-9a-fA-F]{32,}\b/g,`[redacted]`),r.trim().substring(0,n)}function oe(){let e=window.innerWidth;return e<640?`mobile`:e<1024?`tablet`:e<1440?`desktop`:`large-desktop`}function se(){let e=navigator.userAgent;return e.includes(`Firefox`)?`Firefox`:e.includes(`Edg`)?`Edge`:e.includes(`Chrome`)?`Chrome`:e.includes(`Safari`)?`Safari`:`Other`}function ce(){let e=navigator.userAgent;return/Mobile|Android|iPhone|iPad/.test(e)?/iPad|Tablet/.test(e)?`tablet`:`mobile`:`desktop`}function le(){return{"browser.do11y.viewport_category":oe(),"browser.family":se(),"device.type":ce(),"browser.language":(navigator.language||``).split(`-`)[0]||`unknown`,"browser.do11y.timezone_offset":new Date().getTimezoneOffset()/60}}let ue=[{match:`chatgpt`,platform:`ChatGPT`},{match:`chat.com`,platform:`ChatGPT`},{match:`openai`,platform:`ChatGPT`},{match:`perplexity`,platform:`Perplexity`},{match:`claude.ai`,platform:`Claude`},{match:`anthropic`,platform:`Claude`},{match:`gemini`,platform:`Gemini`},{match:`copilot`,platform:`Copilot`},{match:`deepseek`,platform:`DeepSeek`},{match:`meta.ai`,platform:`Meta AI`},{match:`grok`,platform:`Grok`},{match:`x.ai`,platform:`Grok`},{match:`mistral`,platform:`Mistral`},{match:`you.com`,platform:`You.com`},{match:`phind`,platform:`Phind`}];function de(e){if(!e||e===`direct`)return{referrerCategory:`direct`,aiPlatform:null};if(e===`internal`)return{referrerCategory:`internal`,aiPlatform:null};if(e===`unknown`)return{referrerCategory:`unknown`,aiPlatform:null};let t=e.toLowerCase();for(let e of ue)if(t.indexOf(e.match)!==-1)return{referrerCategory:`ai`,aiPlatform:e.platform};return/google\.|bing\.|baidu\.|yandex\.|duckduckgo\.|yahoo\./.test(t)?{referrerCategory:`search-engine`,aiPlatform:null}:/github\.|gitlab\.|bitbucket\./.test(t)?{referrerCategory:`code-host`,aiPlatform:null}:/stackoverflow\.|stackexchange\.|reddit\.|news\.ycombinator\./.test(t)?{referrerCategory:`community`,aiPlatform:null}:/twitter\.|x\.com|linkedin\.|facebook\.|threads\.net/.test(t)?{referrerCategory:`social`,aiPlatform:null}:{referrerCategory:`other`,aiPlatform:null}}function fe(){try{if(!document.referrer)return`direct`;let e=new URL(document.referrer);return e.hostname===window.location.hostname?`internal`:e.hostname}catch{return`unknown`}}function pe(){return{"url.path":window.location.pathname,"url.fragment":window.location.hash||null,"browser.do11y.url.has_params":window.location.search?`has_params`:null,"browser.do11y.page_title":v(document.title,150)}}function me(){if(window.crypto&&typeof window.crypto.randomUUID==`function`)return window.crypto.randomUUID();if(window.crypto&&typeof window.crypto.getRandomValues==`function`){let e=new Uint8Array(16);window.crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return t.slice(0,8)+`-`+t.slice(8,12)+`-`+t.slice(12,16)+`-`+t.slice(16,20)+`-`+t.slice(20)}return`no-crypto-00-0000-0000-000000000000`}function he(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.startTime==`string`&&Array.isArray(t.pageSequence)&&typeof t.pageCount==`number`}function y(){let e=null;try{let t=sessionStorage.getItem(`do11y_session`);if(t){let n=JSON.parse(t);he(n)&&(e=n)}}catch{}return e||(e={id:me(),startTime:new Date().toISOString(),pageSequence:[],pageCount:0,referrerCategory:null,aiPlatform:null},b(e)),e}function b(e){try{sessionStorage.setItem(`do11y_session`,JSON.stringify(e))}catch{}}function ge(e){let t=y();return t.pageCount++,t.pageSequence.push({path:e,timestamp:new Date().toISOString(),index:t.pageCount}),t.pageSequence.length>50&&(t.pageSequence=t.pageSequence.slice(-50)),b(t),t}let x=new Set,S=null;function _e(e){let t=e;for(;t&&t!==document.body&&t!==document.documentElement;){let e=window.getComputedStyle(t).overflowY;if((e===`auto`||e===`scroll`)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}return null}function C(e,t){let n,r,o;S&&S.scrollHeight>S.clientHeight?(n=S.scrollTop,r=S.scrollHeight,o=S.clientHeight):(n=window.scrollY||document.documentElement.scrollTop,r=document.documentElement.scrollHeight,o=window.innerHeight);let s=r-o;if(s<=0){e.scrollThresholds.forEach(e=>{x.has(e)||(x.add(e),t(l,{[i]:e,[a]:100}))});return}let c=Math.round(n/s*100);e.scrollThresholds.forEach(e=>{c>=e&&!x.has(e)&&(x.add(e),t(l,{[i]:e,[a]:c}))})}function ve(e,t){if(!e.trackScrollDepth)return;if(e.contentSelector){let t=document.querySelector(e.contentSelector);t&&(S=_e(t))}let n=!1;function r(){n||=(window.requestAnimationFrame(()=>{C(e,t),n=!1}),!0)}if(window.addEventListener(`scroll`,r),S&&(S.addEventListener(`scroll`,r),e.debug)){let e=S;console.log(`[do11y] Using container-based scroll tracking:`,e.className||e.tagName)}C(e,t)}function ye(){x=new Set}function be(){return x}function w(e,t,n){e(`browser.do11y.section_visible`,{"browser.do11y.section.heading":v(t.textContent?.trim()??``,100),"browser.do11y.section.heading_level":parseInt(t.tagName.charAt(1),10),"browser.do11y.section.visible_seconds":Math.round(n/1e3)})}let T=null,E={};function xe(e,t){if(!e.trackSectionVisibility||typeof IntersectionObserver>`u`)return;let n=e.sectionVisibleThreshold*1e3;T=new IntersectionObserver(e=>{e.forEach(e=>{let r=e.target.getAttribute(`data-do11y-section-id`);if(r)if(e.isIntersecting){if(!E[r]){let i={start:Date.now(),reported:!1,timeoutId:null};i.timeoutId=setTimeout(()=>{E[r]&&!E[r].reported&&(w(t,e.target,n),E[r].reported=!0)},n),E[r]=i}}else{if(E[r]&&(E[r].timeoutId&&clearTimeout(E[r].timeoutId),!E[r].reported)){let i=Date.now()-E[r].start;i>=n&&(w(t,e.target,i),E[r].reported=!0)}delete E[r]}})},{threshold:.5}),D()}function D(){T&&document.querySelectorAll(`h2, h3`).forEach((e,t)=>{e.setAttribute(`data-do11y-section-id`,`section-`+t),T.observe(e)})}function Se(e,t){if(!T)return;let n=Date.now(),r=e.sectionVisibleThreshold*1e3;Object.keys(E).forEach(e=>{let i=E[e];if(i&&!i.reported){i.timeoutId&&clearTimeout(i.timeoutId);let a=n-i.start;if(a>=r){let n=typeof CSS<`u`&&typeof CSS.escape==`function`?CSS.escape(e):e.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~ ]/g,`\\$&`),r=document.querySelector(`[data-do11y-section-id="`+n+`"]`);r&&w(t,r,a)}}}),E={}}function Ce(){T&&=(E&&Object.keys(E).length>0&&(Object.keys(E).forEach(e=>{let t=E[e];t&&!t.reported&&t.timeoutId&&clearTimeout(t.timeoutId)}),E={}),T.disconnect(),null)}let O=Date.now(),k=Date.now(),A=0,j=!0,M=!1;function N(e,t,i){if(M)return;M=!0,j&&(A+=Date.now()-k);let a=Date.now()-O,o=a>0?A/a:0,s=0;be().forEach(e=>{e>s&&(s=e)}),Se(e,t);let c=y();t(`browser.do11y.page_exit`,{"browser.do11y.page_exit.total_time_seconds":Math.round(a/1e3),"browser.do11y.page_exit.active_time_seconds":Math.round(A/1e3),"browser.do11y.page_exit.engagement_ratio":Math.round(o*100)/100,"browser.do11y.page_exit.max_scroll_depth":s,[n]:c.referrerCategory,[r]:c.aiPlatform}),i?.()}function we(e,t){document.addEventListener(`visibilitychange`,()=>{document.hidden?j&&=(A+=Date.now()-k,!1):(k=Date.now(),j=!0)}),window.addEventListener(`beforeunload`,()=>{N(e,t)})}function Te(){O=Date.now(),k=Date.now(),A=0,j=!0,M=!1}function Ee(){M=!1}function P(e,t){Ee();let i=ge(window.location.pathname),a=fe(),o=de(a);i.pageCount===1&&(i.referrerCategory=o.referrerCategory,i.aiPlatform=o.aiPlatform,b(i)),t(`browser.do11y.page_view`,{"browser.do11y.referrer_domain":a,[n]:o.referrerCategory,[r]:o.aiPlatform,"browser.do11y.is_first_page":i.pageCount===1,"browser.do11y.previous_path":i.pageSequence.length>1?i.pageSequence[i.pageSequence.length-2].path:null})}function De(e,t){return e.closest(t.navigationSelector)?`navigation`:e.closest(t.footerSelector)?`footer`:e.closest(t.contentSelector)?`content`:`other`}function Oe(){try{let e=new Map;document.querySelectorAll(`a[href]`).forEach(t=>{let n=t.getAttribute(`href`)??``,r=e.get(n)??[];r.push(t),e.set(n,r)}),e.forEach(e=>{e.forEach((e,t)=>{e.setAttribute(`data-do11y-link-idx`,String(t+1))})})}catch{}}function ke(e,t){Oe(),document.addEventListener(`click`,n=>{let r=n.target.closest(`a`);if(!r)return;let i=r.getAttribute(`href`);if(!i)return;let a=`other`,o=null;try{if(i.startsWith(`#`))a=`anchor`;else if(i.startsWith(`/`)||i.startsWith(`./`)||i.startsWith(`../`))a=`internal`;else if(i.startsWith(`http`)){let e=new URL(i);e.hostname===window.location.hostname?a=`internal`:(a=`external`,o=e.hostname)}else i.startsWith(`mailto:`)&&(a=`email`)}catch{}if(a===`internal`&&!e.trackInternalLinks||a===`external`&&!e.trackOutboundLinks)return;let s=parseInt(r.getAttribute(`data-do11y-link-idx`)??`1`,10);t(`browser.do11y.link_click`,{"browser.do11y.link.type":a,"browser.do11y.link.target_url":i,"browser.do11y.link.target_domain":o,"browser.do11y.link.text":v(r.textContent,100),"browser.do11y.link.context":De(r,e),"browser.do11y.link.section":v(_(r),100),"browser.do11y.link.index":s})},!0)}function Ae(e,t){e.trackSearch&&(document.addEventListener(`click`,n=>{n.target.closest(e.searchSelector)&&t(u,{})},!0),document.addEventListener(`keydown`,n=>{if((n.metaKey||n.ctrlKey)&&n.key===`k`){if(!document.querySelector(e.searchSelector))return;t(u,{"browser.do11y.search.trigger":`keyboard`})}}))}function je(e){try{document.querySelectorAll(e.codeBlockSelector).forEach((e,t)=>{e.setAttribute(`data-do11y-code-idx`,String(t+1))})}catch{}}function Me(e,t){e.trackCopy&&(je(e),document.addEventListener(`click`,n=>{let r=n.target.closest(e.copyButtonSelector);if(r){let n=r.closest(`[class*="language-"], [language]`)??r.closest(e.codeBlockSelector)??r.closest(`.expressive-code`)?.querySelector(`pre`)??r.closest(`div, section`)?.querySelector(`pre`)??r.parentElement?.querySelector(`pre`)??null,i=re((n?n.tagName===`PRE`?n.querySelector(`code`):n.querySelector(`code[class*="language-"], code[language]`)??n.querySelector(`code`):null)??n??r),a=parseInt(n?.getAttribute(`data-do11y-code-idx`)??`1`,10);t(`browser.do11y.code_copied`,{"browser.do11y.code.language":i,"browser.do11y.code.section":v(_(n??r),100),"browser.do11y.code.index":a})}},!0))}function Ne(e,t){e.trackTabSwitches&&document.addEventListener(`click`,n=>{let r=`[role="tab"], .tabs button, .tabs a, .tabbed-labels label`,i=h(e.tabContainerSelector);i&&(r+=`, `+i+` button, `+i+` a, `+i+` label`);let a=n.target.closest(r);if(!a||a.getAttribute(`aria-selected`)===`true`||a.classList.contains(`active`)||a.classList.contains(`is-active`))return;let o=v(a.textContent,50);if(!o)return;let s=v(_(a),100);t(`browser.do11y.tab_switch`,{"browser.do11y.tab.label":o,"browser.do11y.tab.group":s,"browser.do11y.tab.is_default":!1})})}function Pe(e,t){e.trackTocClicks&&document.addEventListener(`click`,n=>{let r=n.target.closest(`a`);if(!r)return;let i=ae(r,e);if(!i)return;let a=r.getAttribute(`href`),o=a?ie(a):null;if(!o)return;let s=v(r.textContent,100),c=null;try{let e=o.slice(1),t=document.getElementById(e);t&&/^H[1-6]$/.test(t.tagName)&&(c=parseInt(t.tagName.charAt(1),10))}catch{}let l=i.querySelectorAll(`a[href*="#"]`),u=1;for(let e=0;e<l.length;e++)if(l[e]===r){u=e+1;break}t(`browser.do11y.toc_click`,{"browser.do11y.toc.heading":s,"browser.do11y.toc.heading_level":c,"browser.do11y.toc.position":u})},!0)}function Fe(e,t){e.trackFeedback&&document.addEventListener(`click`,n=>{let r=n.target.closest(`button, [role="button"], a`);if(!r||!r.closest(h(e.feedbackSelector)??`[class*="feedback"], [class*="helpful"], [class*="rating"], [class*="was-this"], [data-feedback]`))return;let i=(r.textContent??``).trim().toLowerCase(),a=(r.getAttribute(`aria-label`)??``).toLowerCase(),o=(r.getAttribute(`title`)??``).toLowerCase(),s=r.getAttribute(`data-value`)??r.getAttribute(`data-md-value`)??r.getAttribute(`data-feedback`),c=s&&/^[\w\s.,!?-]{1,50}$/.test(s)?s:null,l=null;c?l=c:/\byes\b|👍|thumbs.?up|helpful/i.test(i+` `+a+` `+o)?l=`yes`:/\bno\b|👎|thumbs.?down|not.?helpful/i.test(i+` `+a+` `+o)&&(l=`no`),l&&t(`browser.do11y.feedback`,{"browser.do11y.feedback.rating":l})})}function Ie(e,t){e.trackExpandCollapse&&(document.addEventListener(`toggle`,e=>{let n=e.target;if(n.tagName!==`DETAILS`)return;let r=n.querySelector(`summary`),i=v(r?r.textContent:``,100);t(d,{[o]:i,[s]:n.open?`expand`:`collapse`,[c]:v(_(n),100)})},!0),document.addEventListener(`click`,e=>{let n=e.target.closest(`[aria-expanded], [class*="accordion"] button, [class*="collapsible"] button`);if(!n||n.closest(`details`)||n.closest(`nav, [role="navigation"], header`))return;let r=n.getAttribute(`aria-expanded`)===`true`;t(d,{[o]:v(n.textContent,100),[s]:r?`collapse`:`expand`,[c]:v(_(n),100)})}))}let F=[],I=null,Le=p(),L=!1,R=null,z=[],B=null,V=!1,H=!1;function U(e){L=e}function W(){return L}function Re(){return F.length}function ze(e,n,r){if(L||!Le.allow(n,r,e.rateLimitMs,e.debug))return;let i=y(),a=new Date,o={_time:a.toISOString(),eventName:n,"browser.do11y.version":t,"session.id":i.id,"browser.do11y.session_page_count":i.pageCount,...pe(),...le(),...r};if(e.debug&&console.log(`[Do11y] Event queued:`,n,o),e.destination===`otlp`){if(R){Ue(n,o,a);return}if(V){e.debug&&console.warn(`[Do11y] OTel SDK unavailable; dropping event:`,n);return}z.push(o),z.length>500&&(z=z.slice(-500),console.warn(`[Do11y] OTLP pending buffer capped at 500 events — oldest events dropped`)),Ge(e);return}F.push(o),F.length>500&&(F=F.slice(-500),console.warn(`[Do11y] Event queue capped at 500 events — oldest events dropped`)),F.length>=e.maxBatchSize?Y(e):Be(e)}function Be(e){I||=setTimeout(()=>Y(e),e.flushInterval)}function Ve(e,t=!1){return G(e,t)}function He(e){try{return new URL(e).hostname.endsWith(`.supabase.co`)}catch{return!1}}function G(e,t=!1){try{let n=new URL(e),r=n.hostname,i=r===`localhost`||r===`127.0.0.1`||r===`::1`||/^(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.)/.test(r);return t&&i&&n.protocol===`http:`?!0:!(n.protocol!==`https:`||i)}catch{return!1}}function K(e){return e.destination===`supabase`?e.supabaseUrl?Ve(e.supabaseUrl,e.debug)?(e.debug&&!H&&!He(e.supabaseUrl)&&(H=!0,console.warn(`[Do11y] Non-hosted Supabase URL. Ensure you configure your instance's REST endpoint and CORS settings.`)),!e.supabaseKey||typeof e.supabaseKey!=`string`||e.supabaseKey.length<10?(e.debug&&console.warn(`[Do11y] Invalid or missing Supabase publishable key`),!1):/^[a-zA-Z0-9_-]+$/.test(e.supabaseTable)?!0:(e.debug&&console.warn(`[Do11y] Invalid table name`),!1)):(e.debug&&console.warn(`[Do11y] Invalid Supabase URL. Must be a valid HTTPS URL (HTTP is allowed for localhost/private addresses when debug is enabled).`),!1):(e.debug&&console.warn(`[Do11y] No Supabase URL configured`),!1):e.destination===`http`?e.endpoint?G(e.endpoint,e.debug)?!0:(e.debug&&console.warn(`[Do11y] Invalid HTTP endpoint. Must be HTTPS and not a private address.`),!1):(e.debug&&console.warn(`[Do11y] No HTTP endpoint configured`),!1):e.destination===`otlp`?e.otelSdkEndpoint?!0:(e.debug&&console.warn(`[Do11y] No OTLP endpoint configured`),!1):(e.debug&&console.warn(`[Do11y] Unknown destination:`,e.destination),!1)}let q=`0.222.0`;function Ue(e,t,n){if(!R)return;let r={...t};delete r._time,delete r.eventName,R.emit({eventName:e,severityNumber:9,timestamp:n.getTime(),attributes:r,body:``})}function We(){if(!R||z.length===0)return;let e=z;z=[];for(let t of e)Ue(t.eventName,t,new Date(t._time))}function Ge(e){R||B||V||(B=Ke(e).catch(e=>{V=!0,z=[],console.warn(`[Do11y] OTel SDK initialization failed; buffered events dropped:`,e)}).finally(()=>{B=null}))}async function Ke(e){if(R)return;let n=`https://esm.sh/`,r=async e=>import(e),i=await r(`${n}@opentelemetry/api-logs@${q}`),a=await r(`${n}@opentelemetry/sdk-logs@${q}`),o=await r(`${n}@opentelemetry/exporter-logs-otlp-http@${q}`),s={"service.name":e.otelSdkServiceName||`do11y`,"service.version":t,"telemetry.sdk.name":`do11y`,"telemetry.sdk.language":`webjs`,"telemetry.sdk.version":t,...e.otelSdkResourceAttributes},c=new a.LoggerProvider({resource:{attributes:s},processors:[new a.BatchLogRecordProcessor({exporter:new o.OTLPLogExporter({url:e.otelSdkEndpoint.replace(/\/$/,``)+`/v1/logs`,headers:e.otelSdkHeaders})})]});i.logs.setGlobalLoggerProvider(c),R=c.getLogger(`do11y`),We(),e.debug&&console.log(`[Do11y] OTel SDK initialized with endpoint:`,e.otelSdkEndpoint)}function J(e,t){if(t.destination===`supabase`){let n=t.supabaseUrl.replace(/\/$/,``)+`/rest/v1/`+t.supabaseTable,r=t.bodyTransform??(e=>e.map(e=>({payload:e})));return{url:n,headers:{apikey:t.supabaseKey,Authorization:`Bearer `+t.supabaseKey,"Content-Type":`application/json`,Prefer:`return=minimal`},body:JSON.stringify(r(e))}}let n=t.bodyTransform??(e=>e);return{url:t.endpoint,headers:{"Content-Type":`application/json`,...t.headers},body:JSON.stringify(n(e))}}function qe(e){try{return new URL(e).origin!==window.location.origin}catch{return!1}}function Je(e,t,n,r){let i=qe(e.url);r.debug&&i&&console.log(`[Do11y] Cross-origin request to`,new URL(e.url).origin,`- requires CORS headers on the server`),fetch(e.url,{method:`POST`,headers:e.headers,body:e.body,keepalive:!0,mode:i?`cors`:`same-origin`}).then(e=>{if(e.ok){r.debug&&console.log(`[Do11y] Flushed`,t.length,`events`);return}if(n>0&&(e.status>=500||e.status===429)){r.debug&&console.log(`[Do11y] Retrying after error:`,e.status),F=t.concat(F),setTimeout(()=>Y(r,n-1),r.retryDelay*(r.maxRetries-n+1));return}r.debug&&e.text().then(t=>{let n=`[Do11y] Ingest failed: ${e.status}`;e.status===0&&e.type===`opaque`?console.error(n,`- CORS error: server did not return Access-Control-Allow-Origin`):console.error(n,t)}).catch(()=>{})}).catch(e=>{if(n>0){if(r.debug){let t=i?` (this may be a CORS issue — try using an OTel Collector proxy)`:``;console.log(`[Do11y] Network error, retrying:`,e.message+t)}F=t.concat(F),setTimeout(()=>Y(r,n-1),r.retryDelay*(r.maxRetries-n+1))}else r.debug&&console.error(`[Do11y] Failed to send events:`,e.message)})}function Y(e,t){if(I&&=(clearTimeout(I),null),e.destination===`otlp`){F.length>0&&(e.debug&&console.warn(`[Do11y] Dropping `+F.length+` queued events (OTLP mode has no HTTP transport)`),F=[]);return}if(F.length===0||!K(e))return;let n=typeof t==`number`?t:e.maxRetries,r=F.slice();F=[],Je(J(r,e),r,n,e)}function Ye(e){if(e.destination===`otlp`||F.length===0||!K(e))return;let t=F;F=[];let n=J(t,e);try{fetch(n.url,{method:`POST`,headers:n.headers,body:n.body,keepalive:!0})}catch{}e.debug&&console.log(`[Do11y] Sync flushed`,t.length,`events`)}function Xe(){I&&=(clearTimeout(I),null)}let X={destination:`supabase`,supabaseUrl:``,supabaseKey:``,supabaseTable:`do11y_events`,endpoint:``,headers:{},bodyTransform:void 0,otelSdkEndpoint:``,otelSdkHeaders:{},otelSdkServiceName:`do11y`,otelSdkResourceAttributes:{},debug:!1,flushInterval:5e3,maxBatchSize:10,trackOutboundLinks:!0,trackInternalLinks:!0,trackScrollDepth:!0,scrollThresholds:[25,50,75,90],allowedDomains:null,respectDNT:!0,maxRetries:2,retryDelay:1e3,rateLimitMs:100,framework:`mintlify`,trackSectionVisibility:!0,sectionVisibleThreshold:3,trackSearch:!0,trackCopy:!0,trackTabSwitches:!0,trackTocClicks:!0,trackExpandCollapse:!0,trackFeedback:!0,tabContainerSelector:null,tocSelector:null,feedbackSelector:null,searchSelector:null,copyButtonSelector:null,codeBlockSelector:null,navigationSelector:null,footerSelector:null,contentSelector:null,trackSpaPathChanges:!1,sessionAttributes:!0},Ze=!!window.__do11yInitialized;window.__do11yInitialized=!0;let Qe=window.self!==window.top;Qe&&!Ze&&(window.__do11yInitialized=!1);let Z=null,Q=null;function $e(){let e=X,t=window.Do11yConfig;if(t&&typeof t==`object`){for(let n in X)if(Object.prototype.hasOwnProperty.call(t,n)){let r=t[n];r!==void 0&&(e[n]=r)}}let n=document.querySelector(`meta[name="do11y-destination"]`);if(n){let e=n.getAttribute(`content`);(e===`supabase`||e===`http`||e===`otlp`)&&(X.destination=e)}let r=document.querySelector(`meta[name="do11y-url"]`);r&&(X.supabaseUrl=r.getAttribute(`content`)??X.supabaseUrl);let i=document.querySelector(`meta[name="do11y-key"]`);i&&(X.supabaseKey=i.getAttribute(`content`)??X.supabaseKey);let a=document.querySelector(`meta[name="do11y-table"]`);a&&(X.supabaseTable=a.getAttribute(`content`)??X.supabaseTable);let o=document.querySelector(`meta[name="do11y-endpoint"]`);o&&(X.endpoint=o.getAttribute(`content`)??X.endpoint);let s=document.querySelector(`meta[name="do11y-otlp-endpoint"]`);s&&(X.otelSdkEndpoint=s.getAttribute(`content`)??X.otelSdkEndpoint);let c=document.querySelector(`meta[name="do11y-otlp-headers"]`);if(c)try{let e=JSON.parse(c.getAttribute(`content`)??`{}`);typeof e==`object`&&e&&(X.otelSdkHeaders=e)}catch{}let l=document.querySelector(`meta[name="do11y-debug"]`);l&&l.getAttribute(`content`)===`true`&&(X.debug=!0);let u=document.querySelector(`meta[name="do11y-domains"]`);if(u){let e=u.getAttribute(`content`);e&&(X.allowedDomains=e.split(`,`).map(e=>e.trim()))}let d=document.querySelector(`meta[name="do11y-framework"]`);if(d){let e=d.getAttribute(`content`);e&&[`mintlify`,`docusaurus`,`nextra`,`mkdocs-material`,`vitepress`,`starlight`,`docsy`,`custom`].includes(e)?X.framework=e:e&&X.debug&&console.warn(`[Do11y] Unknown framework in meta tag: "`+e+`". Using default: `+X.framework)}if(ee(X),X.debug&&console.log(`[Do11y] Initializing with config:`,{destination:X.destination,framework:X.framework,allowedDomains:X.allowedDomains,respectDNT:X.respectDNT}),te(X)){U(!0),X.debug&&console.log(`[Do11y] Tracking disabled`);return}(X.destination===`supabase`?X.supabaseKey:X.destination===`otlp`?X.otelSdkEndpoint:X.endpoint)||(console.warn(`[Do11y] No destination configured. Events will not be sent.`),X.destination===`supabase`?console.warn(`[Do11y] Add <meta name="do11y-url"> and <meta name="do11y-key"> to enable.`):X.destination===`otlp`?console.warn(`[Do11y] Add <meta name="do11y-otlp-endpoint"> to enable.`):console.warn(`[Do11y] Add <meta name="do11y-endpoint"> to enable.`));let f=(e,t)=>{ze(X,e,t)};P(X,f),ke(X,f),ve(X,f),we(X,f),Ae(X,f),Me(X,f),xe(X,f),Ne(X,f),Pe(X,f),Fe(X,f),Ie(X,f);let p=window.location.pathname,m=()=>{window.location.pathname!==p&&(p=window.location.pathname,N(X,f,()=>Y(X)),ye(),Te(),P(X,f),D(),C(X,f))};Z=new MutationObserver(m),Z.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener(`popstate`,m),Q=window.setInterval(m,200),Object.freeze(X),window.addEventListener(`beforeunload`,()=>{Q!==null&&(clearInterval(Q),Q=null),Ye(X),Xe()}),document.addEventListener(`visibilitychange`,()=>{document.hidden&&Q!==null?(clearInterval(Q),Q=null):!document.hidden&&Q===null&&X.trackSpaPathChanges&&(Q=window.setInterval(m,200))}),X.debug&&console.log(`[Do11y] Initialized successfully`)}function $(){Z&&=(Z.disconnect(),null),Q!==null&&(clearInterval(Q),Q=null),Ce(),Ye(X),Xe(),U(!0),window.__do11yInitialized=!1}return!Ze&&!Qe&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,$e):$e()),window.Do11y=window.Do11y??{getConfig:()=>({destination:X.destination,hasCredentials:X.destination===`supabase`?!!X.supabaseKey:X.destination===`otlp`?!!X.otelSdkEndpoint:!!X.endpoint,isDisabled:W(),allowedDomains:X.allowedDomains,respectDNT:X.respectDNT}),flush:()=>Y(X),isEnabled:()=>W()?!1:X.destination===`supabase`?!!X.supabaseKey:X.destination===`otlp`?!!X.otelSdkEndpoint:!!X.endpoint,getQueueSize:()=>Re(),version:`0.2.2`,destroy:()=>$()},e.destroy=$,e})({});
@@ -9,7 +9,7 @@ import { logs } from "@opentelemetry/api-logs";
9
9
  * Standard attrs from https://opentelemetry.io/docs/specs/semconv/.
10
10
  * Custom do11y attrs use the `browser.do11y.*` namespace.
11
11
  */
12
- const VERSION = "0.2.1";
12
+ const VERSION = "0.2.2";
13
13
  const ATTR_SESSION_ID = "session.id";
14
14
  const ATTR_URL_PATH = "url.path";
15
15
  const ATTR_URL_FRAGMENT = "url.fragment";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manototh/do11y",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Documentation observability",
5
5
  "type": "module",
6
6
  "main": "./dist/do11y.min.js",
@@ -35,8 +35,8 @@
35
35
  ],
36
36
  "license": "MIT",
37
37
  "peerDependencies": {
38
- "@opentelemetry/api-logs": "^0.221.0",
39
- "@opentelemetry/instrumentation": "^0.221.0"
38
+ "@opentelemetry/api-logs": "^0.222.0",
39
+ "@opentelemetry/instrumentation": "^0.222.0"
40
40
  },
41
41
  "peerDependenciesMeta": {
42
42
  "@opentelemetry/api-logs": {
@@ -47,8 +47,8 @@
47
47
  }
48
48
  },
49
49
  "devDependencies": {
50
- "@opentelemetry/api-logs": "^0.221.0",
51
- "@opentelemetry/instrumentation": "^0.221.0",
50
+ "@opentelemetry/api-logs": "^0.222.0",
51
+ "@opentelemetry/instrumentation": "^0.222.0",
52
52
  "oxfmt": "latest",
53
53
  "oxlint": "latest",
54
54
  "rolldown": "latest",