From 752b251e0f5c52b09709ad4bf306c9752318de5a Mon Sep 17 00:00:00 2001 From: Wilmer Arambula Date: Wed, 19 Aug 2026 20:08:06 -0400 Subject: [PATCH 1/2] fix: harden packaging, privacy, collector lifecycle, snapshot recovery, dump rendering, and toolbar messaging. --- .gitattributes | 4 +- CHANGELOG.md | 1 + README.md | 9 + codecov.yml | 12 + resources/assets/dist/js/debug.min.js | 2 +- resources/assets/dist/js/focus.min.js | 2 +- resources/assets/dist/js/toolbar.min.js | 2 +- resources/src/toolbar/element.js | 10 +- resources/src/toolbar/focus.js | 14 + resources/tests/toolbar-runtime.test.js | 51 ++ src/Capture/CapturePolicy.php | 145 +++++ src/Collector/CollectorCoordinator.php | 67 ++- src/Helper/SensitiveDataRedactor.php | 107 +++- src/Instrumentation/InstrumentationGuard.php | 49 ++ src/Panel/Dump/DumpCardRenderer.php | 89 ++- src/Panel/Profile/ProfileTimings.php | 25 +- src/Panel/User/UserDataNormalizer.php | 3 +- src/Storage/DebugArray.php | 11 +- src/Storage/DebugValue.php | 121 ++-- src/Storage/ExceptionSnapshot.php | 17 +- src/Storage/ManifestReadResult.php | 23 + src/Storage/SnapshotReadResult.php | 19 + src/Storage/SnapshotStore.php | 381 ++++++++++-- src/Toolbar/ToolbarData.php | 1 + src/Toolbar/ToolbarItem.php | 6 +- src/Toolbar/ToolbarPanel.php | 3 +- tests/Capture/CapturePolicyTest.php | 129 ++++ tests/Collector/CollectorCoordinatorTest.php | 96 +++ tests/Helper/SensitiveDataRedactorTest.php | 47 ++ .../InstrumentationGuardTest.php | 65 +++ tests/Panel/Dump/DumpCardRendererTest.php | 54 ++ tests/Panel/Profile/ProfileTimingsTest.php | 41 ++ tests/Panel/User/UserDataNormalizerTest.php | 16 + tests/Storage/DebugValueTest.php | 51 ++ tests/Storage/ExceptionSnapshotTest.php | 29 + tests/Storage/SnapshotStoreTest.php | 551 +++++++++++++++++- tests/Support/CollectorFixture.php | 9 +- tests/Support/CoverageGate.php | 169 ++++++ tests/Toolbar/ToolbarDataTest.php | 2 + 39 files changed, 2295 insertions(+), 138 deletions(-) create mode 100644 codecov.yml create mode 100644 src/Capture/CapturePolicy.php create mode 100644 src/Instrumentation/InstrumentationGuard.php create mode 100644 src/Storage/ManifestReadResult.php create mode 100644 src/Storage/SnapshotReadResult.php create mode 100644 tests/Capture/CapturePolicyTest.php create mode 100644 tests/Instrumentation/InstrumentationGuardTest.php create mode 100644 tests/Panel/Profile/ProfileTimingsTest.php create mode 100644 tests/Support/CoverageGate.php diff --git a/.gitattributes b/.gitattributes index bb567d4..f98e611 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,7 +34,6 @@ /.stylelintignore export-ignore /codeception.yml export-ignore /composer-require-checker.json export-ignore -/docs export-ignore /ecs.php export-ignore /infection.json* export-ignore /package-lock.json export-ignore @@ -42,7 +41,10 @@ /phpstan*.neon* export-ignore /phpunit.xml.dist export-ignore /rector.php export-ignore +/resources/tests export-ignore /runtime export-ignore +/scaffold-lock.json export-ignore +/stryker.config.mjs export-ignore /tests export-ignore /vite.config.js export-ignore diff --git a/CHANGELOG.md b/CHANGELOG.md index 516b90c..3ff3fc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,3 +23,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat(ui): share User guest and RBAC section rendering and support selecting filtered tabs. - feat(ui): add sensitive queue-payload redaction and recognize Yii3 queue producers for Dump, Mail, and Queue parity. - fix(ui): add keyboard-resizable drawers with Escape handling and focus restoration. +- fix: harden packaging, privacy, collector lifecycle, snapshot recovery, dump rendering, and toolbar messaging. diff --git a/README.md b/README.md index 2f7a5e0..fa0a277 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,15 @@ panel views remain in each adapter. Yii adapters resolve the packaged frontend a The visual and behavioral synchronization contract for the Yii adapters is documented in the [Yii Debug UI parity baseline](docs/ui-parity-baseline.md). +Persistent adapters apply `PHPForge\Debug\Capture\CapturePolicy` before snapshot capture. Its secure defaults redact +common credentials, authorization and cookie values recursively, suppress raw bodies whose decoded form changed, +truncate opaque bodies at 64 KiB, and sanitize query strings and diagnostic assignments. Tagged-value capture and +hydration also enforce depth and node budgets, while newly captured exception traces intentionally omit arguments. + +`SnapshotStore::loadManifest()` and `readSnapshot()` retain their fail-closed `[]` / `null` behavior. Integrations that +need to report filesystem, lock, recovery, corruption, or envelope-integrity failures can use the additive +`loadManifestResult()` and `readSnapshotResult()` methods and inspect the result's nullable `error` property. + Current adapters: - `yii2-extensions/debug` diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..585dd38 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,12 @@ +coverage: + precision: 2 + round: down + status: + project: + default: + target: 100% + threshold: 0% + patch: + default: + target: 100% + threshold: 0% diff --git a/resources/assets/dist/js/debug.min.js b/resources/assets/dist/js/debug.min.js index 3584d3e..af6d306 100644 --- a/resources/assets/dist/js/debug.min.js +++ b/resources/assets/dist/js/debug.min.js @@ -1 +1 @@ -import{i as e}from"./focus.min.js";(function(){var e=document.querySelector(`[data-yii-debug-history-cursor]`);if(!e)return;var t=Array.prototype.slice.call(document.querySelectorAll(`tr[data-yii-debug-tag]`));if(t.length===0)return;var n=[`2xx`,`3xx`,`4xx`,`5xx`,`none`],r=[`get`,`post`,`put`,`delete`,`other`],i=e.getAttribute(`data-yii-debug-cursor-init`)||``,a=0;if(i!==``){for(var o=0;o=500?`5xx`:e>=400?`4xx`:e>=300?`3xx`:e>=200?`2xx`:`none`}function u(e){var t=(e||``).toUpperCase();return t===`GET`||t===`HEAD`?`get`:t===`POST`?`post`:t===`PUT`||t===`PATCH`?`put`:t===`DELETE`?`delete`:`other`}function d(){t.forEach(function(e,t){e.classList.toggle(`is-cursor`,t===a)});var i=c(t[a]);e.querySelectorAll(`[data-snapshot-field]`).forEach(function(e){var t=e.getAttribute(`data-snapshot-field`);t===`method`?(e.textContent=i.method,r.forEach(function(t){e.classList.remove(`yii-debug-verb-`+t)}),e.classList.add(`yii-debug-verb-`+u(i.method))):t===`url`?(e.textContent=i.url,i.fullUrl&&e.setAttribute(`title`,i.fullUrl)):t===`status`?(e.textContent=i.status?String(i.status):`–`,n.forEach(function(t){e.classList.remove(`yii-debug-status-`+t)}),e.classList.add(`yii-debug-status-`+l(i.status))):t===`time`?(e.textContent=i.time,e.hidden=i.time===``):t===`ajax`&&(e.hidden=!i.ajax)});var o=e.querySelector(`.yii-debug-history-card`);o&&o.setAttribute(`title`,(i.method+` `+(i.fullUrl||i.url)).trim());var s=e.querySelector(`[data-yii-debug-cursor="newest"]`),d=e.querySelector(`[data-yii-debug-cursor="newer"]`),f=e.querySelector(`[data-yii-debug-cursor="older"]`),p=e.querySelector(`[data-yii-debug-cursor="oldest"]`),m=a===0,h=a===t.length-1;s&&(s.disabled=m),d&&(d.disabled=m),f&&(f.disabled=h),p&&(p.disabled=h)}function f(e){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(!(t.top>=0&&t.bottom<=n)){var r=window.scrollY+t.top-n/2+t.height/2;window.scrollTo({top:Math.max(0,r),behavior:`smooth`})}}function p(e){e<0||e>=t.length||e===a||(a=e,d(),f(t[a]))}e.addEventListener(`click`,function(n){var r=n.target.closest(`[data-yii-debug-cursor]`);if(r&&e.contains(r)){if(n.preventDefault(),r.disabled)return;var i=r.getAttribute(`data-yii-debug-cursor`);i===`newer`?p(a-1):i===`older`?p(a+1):i===`newest`?p(0):i===`oldest`&&p(t.length-1)}}),d(),a!==0&&f(t[a])})();var t=3e4;function n(e,t,n){if(e!=null)for(var r=typeof NodeList<`u`&&e instanceof NodeList||Array.isArray(e)?e:[e],i=0;i=0?n.timeout:t,r.onreadystatechange=function(){r.readyState===4&&(r.status>=200&&r.status<300?o():s())},r.ontimeout=s,r.send(n.data||``)}(function(){n(document.querySelectorAll(`.yii-debug-db-explain-toggle`),`click`,function(e){e.preventDefault();var t=this.closest(`.yii-debug-db-explain`),n=t.querySelector(`.yii-debug-db-explain-text`),i=t.classList.contains(`is-open`),a=this;if(i){t.classList.remove(`is-open`),a.setAttribute(`aria-expanded`,`false`);return}if(n.dataset.loaded===`1`){t.classList.add(`is-open`),a.setAttribute(`aria-expanded`,`true`);return}t.classList.add(`is-loading`),r(this.href,{success:function(e){n.innerHTML=e.responseText,n.dataset.loaded=`1`,t.classList.remove(`is-loading`),t.classList.add(`is-open`),a.setAttribute(`aria-expanded`,`true`)},error:function(){t.classList.remove(`is-loading`)}})}),n(document.querySelectorAll(`.yii-debug-db-explain-all a`),`click`,function(){for(var e=new MouseEvent(`click`,{cancelable:!0,bubbles:!0}),t=document.querySelectorAll(`.yii-debug-db-explain-toggle`),n=document.querySelectorAll(`.yii-debug-db-explain.is-open`).length>0,r=0,i=t.length;r0&&r.push(s(t,`module`,`modules`)),n>0&&r.push(s(n,`extension`,`extensions`)),e>0&&r.push(s(e,`matching row`,`matching rows`)),r.join(` · `)}function l(e,t){return e+` of `+t}function u(e,t,n){var r=n===null?e:e.filter(function(e){return!!n[e]});return{hidden:r.length===0,open:n===null?e.indexOf(t)!==-1:r.length>0}}function d(e,t){e.hidden=t,e.parentElement&&e.parentElement.tagName===`LI`&&(e.parentElement.hidden=t)}function f(e){e.hidden=!1;var t=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(t){var n=t.getAttribute(`data-yii-debug-phpinfo-total`);n===null&&(n=t.textContent.trim(),t.setAttribute(`data-yii-debug-phpinfo-total`,n)),t.textContent=n}e.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(e.open=e.getAttribute(`data-yii-debug-phpinfo-default-open`)===`true`)}function p(e,t){var n=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(n){var r=n.getAttribute(`data-yii-debug-phpinfo-total`);r===null&&(r=n.textContent.trim(),n.setAttribute(`data-yii-debug-phpinfo-total`,r)),n.textContent=l(t,r)}}function m(e){i(e.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(e){f(e)}),i(e.querySelectorAll(`tr`)).forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)})}function h(e){e.forEach(function(e){i(e.querySelectorAll(`.yii-debug-phpinfo-table-section.is-directives tr`)).forEach(function(e){if(!e.classList.contains(`h`)){var t=e.querySelector(`th[scope="row"]`),n=i(e.querySelectorAll(`td`));t!==null&&n.length===2&&n[0].textContent.trim()!==n[1].textContent.trim()&&(e.classList.add(`has-local-override`),n[0].title=`Local value differs from master value`)}})})}function g(e){var t=e.querySelector(`[data-yii-debug-phpinfo-search]`),n=e.querySelector(`[data-yii-debug-phpinfo-clear]`),r=e.querySelector(`[data-yii-debug-phpinfo-status]`),s=e.querySelector(`[data-yii-debug-phpinfo-empty]`),f=i(e.querySelectorAll(`.yii-debug-phpinfo-section`)),g=i(e.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)),_=i(e.querySelectorAll(`.yii-debug-phpinfo-extension-group`)),v=e.querySelector(`[data-yii-debug-phpinfo-extensions]`),y=i(e.querySelectorAll(`#phpinfo-overview .yii-debug-phpinfo-overview-hero-section:not(.yii-debug-phpinfo-extensions)`)),b=e.querySelector(`#phpinfo-overview > .yii-debug-disclosure`),x=i(e.querySelectorAll(`.yii-debug-phpinfo-toc-link`)),S=i(e.querySelectorAll(`[data-yii-debug-phpinfo-toc-group]`)),C=Object.create(null),w=Object.create(null),T=!1,E=!1,D,O;if(!f.length)return;f.forEach(function(e){e.id!==``&&(C[e.id]=e)}),g.forEach(function(e){w[e.id]=e});function k(){g.forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)}),_.forEach(function(e){e.hidden=!1;var t=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);t&&(t.textContent=t.getAttribute(`data-yii-debug-phpinfo-total`))}),y.forEach(function(e){e.hidden=!1}),b&&(b.hidden=!1)}function A(){E||=(T=v?v.open:!1,!0)}function j(){E&&=(v&&(v.open=T),!1)}function M(e,t){x.forEach(function(n){var r=n.getAttribute(`data-toc-target`)||``,i=r===e;n.classList.toggle(`is-active`,i),i?n.setAttribute(`aria-current`,`page`):n.removeAttribute(`aria-current`),d(n,t!==null&&!t[r])}),S.forEach(function(n){var r=u(i(n.querySelectorAll(`.yii-debug-phpinfo-toc-link`)).map(function(e){return e.getAttribute(`data-toc-target`)||``}),e,t);n.hidden=r.hidden,n.open=r.open})}function N(){k(),f.forEach(function(e){m(e),e.hidden=e.id!==O}),M(O,null),r&&(r.textContent=``),s&&(s.hidden=!0),n&&(n.hidden=!0)}function P(e){!window.history||!window.history.replaceState||window.history.replaceState(null,``,`#`+e)}function F(e,n){j(),O=C[e]?e:f[0].id,t&&(t.value=``),N(),n&&P(O)}function I(){var e=a(t?t.value:``);if(!e){j(),N();return}A();var u=Object.create(null),d=0,h=0,x=0;k(),f.forEach(function(t){m(t);var n=a(t.getAttribute(`data-section`)).indexOf(e)!==-1,r=0,s=0;n?h++:t.id===`phpinfo-overview`?(g.forEach(function(t){var n=o(t.getAttribute(`data-section`),t.textContent,e);t.hidden=!n,t.classList.toggle(`is-search-match`,n),n&&s++}),_.forEach(function(e){var t=i(e.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)).filter(function(e){return!e.hidden}),n=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);e.hidden=t.length===0,n&&t.length>0&&(n.textContent=l(t.length,n.getAttribute(`data-yii-debug-phpinfo-total`)))}),v&&(v.open=s>0),y.forEach(function(e){e.hidden=!0}),b&&(b.hidden=!0)):t.classList.contains(`yii-debug-phpinfo-module`)&&i(t.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(t){var n=i(t.querySelectorAll(`tr`)),o=n.filter(function(t){var n=t.querySelector(`th[scope="row"], th.e, td.e`);return n!==null&&a(n.textContent).indexOf(e)!==-1});t.hidden=o.length===0,r+=o.length,p(t,o.length),t.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(t.open=o.length>0);var s=new Set(o);n.forEach(function(e){var t=s.has(e),n=e.classList.contains(`h`);e.hidden=!t&&!(n&&o.length>0),e.classList.toggle(`is-search-match`,t)})});var c=n||r>0||s>0;t.hidden=!c,c&&(u[t.id]=!0),d+=r,x+=s}),M(``,u),r&&(r.textContent=c(d,h,x)),s&&(s.hidden=d+h+x!==0),n&&(n.hidden=!1)}function L(){window.clearTimeout(D),t&&(t.value=``,t.focus()),j(),N()}function R(e,t){F(`phpinfo-overview`,!1),v&&(v.open=!0),t&&e&&typeof e.scrollIntoView==`function`&&window.setTimeout(function(){e.scrollIntoView({behavior:`smooth`,block:`center`})},0)}h(f);var z=window.location.hash.replace(/^#/,``),B=w[z]||null;O=C[z]?z:B?`phpinfo-overview`:f[0].id,N(),B&&R(B,!0),t&&(t.addEventListener(`input`,function(){window.clearTimeout(D),D=window.setTimeout(I,120)}),t.addEventListener(`keydown`,function(e){e.key===`Escape`&&t.value!==``&&(e.preventDefault(),L())})),n&&n.addEventListener(`click`,L),x.forEach(function(e){e.addEventListener(`click`,function(t){var n=e.getAttribute(`data-toc-target`)||``;C[n]&&(t.preventDefault(),F(n,!0))})}),window.addEventListener(`hashchange`,function(){var e=window.location.hash.replace(/^#/,``);C[e]?F(e,!1):w[e]&&R(w[e],!0)})}typeof document<`u`&&g(document),(function(){var e=function(e){if(!e||e.nodeName!==`FORM`)return``;var t=new URLSearchParams;return new FormData(e).forEach(function(e,n){typeof e==`string`&&t.append(n,e)}),t.toString()},t=function(e,t){var n=t.responseText||`Unable to switch user.`,r=e.querySelector(`.debug-userswitch__error`);r||(r=document.createElement(`div`),r.className=`debug-userswitch__error yii-debug-callout yii-debug-callout-danger`,r.setAttribute(`role`,`alert`),e.insertBefore(r,e.firstChild)),r.textContent=n},i=!1,a=function(n){i||(i=!0,r({url:n.action,method:`post`,data:e(n),success:function(){window.top.location.reload()},error:function(e){i=!1,t(n,e)}}))};n(document.getElementById(`debug-userswitch__filter`),`click`,function(e){var t;if(e.target.tagName.toLowerCase()===`td`&&e.target.parentElement.parentElement.tagName.toLowerCase()===`tbody`)t=e.target.parentElement;else if(e.target.tagName.toLowerCase()===`tr`&&e.target.parentElement.tagName.toLowerCase()===`tbody`)t=e.target;else return;var n=document.getElementById(`debug-userswitch__set-identity`);document.getElementById(`user_id`).value=t.dataset.key,a(n),e.stopPropagation()}),n(document.getElementById(`debug-userswitch__reset-identity-button`),`click`,function(e){var t=document.getElementById(`debug-userswitch__reset-identity`);e.preventDefault(),e.stopPropagation(),a(t)})})();var _=`yii_debug_theme`,v=`yii-debug-toolbar-theme`;function y(e){if(!e)return null;let t=String(e).toLowerCase().trim().split(/\s+/),n=t.some(e=>[`dark`,`night`,`black`].includes(e));return n===t.some(e=>[`light`,`day`,`white`].includes(e))?null:n?`dark`:`light`}function b(e=v){try{return window.localStorage?y(localStorage.getItem(e)):null}catch{return null}}function x(){let e=`${v}=`,t=(document.cookie||``).split(`;`).map(e=>e.trim()).find(t=>t.startsWith(e));if(!t)return null;try{return y(decodeURIComponent(t.slice(e.length)))}catch{return null}}function S(e){let t=y(e);if(t){try{localStorage.setItem(v,t)}catch{}try{document.cookie=`${v}=${encodeURIComponent(t)};path=/;max-age=31536000;SameSite=Lax`}catch{}}}function C(e){let t;try{t=new URL(e,window.location.href)}catch{return null}if(t.origin!==window.location.origin)return null;let n=t.searchParams.get(`r`)||``;return!t.pathname.includes(`/debug/`)&&!t.pathname.endsWith(`/debug`)&&!n.startsWith(`debug/`)&&!n.startsWith(`debug%2F`)?null:t}function w(e,t){let n=y(t);if(!n)return e;let r=C(e);return r?(r.searchParams.set(_,n),r.href):e}function T(e){let t=document.querySelectorAll(`a[href]`),n=document.querySelectorAll(`form[action]`),r;for(let n=0;n=500?`5xx`:e>=400?`4xx`:e>=300?`3xx`:e>=200?`2xx`:`none`}function u(e){var t=(e||``).toUpperCase();return t===`GET`||t===`HEAD`?`get`:t===`POST`?`post`:t===`PUT`||t===`PATCH`?`put`:t===`DELETE`?`delete`:`other`}function d(){t.forEach(function(e,t){e.classList.toggle(`is-cursor`,t===a)});var i=c(t[a]);e.querySelectorAll(`[data-snapshot-field]`).forEach(function(e){var t=e.getAttribute(`data-snapshot-field`);t===`method`?(e.textContent=i.method,r.forEach(function(t){e.classList.remove(`yii-debug-verb-`+t)}),e.classList.add(`yii-debug-verb-`+u(i.method))):t===`url`?(e.textContent=i.url,i.fullUrl&&e.setAttribute(`title`,i.fullUrl)):t===`status`?(e.textContent=i.status?String(i.status):`–`,n.forEach(function(t){e.classList.remove(`yii-debug-status-`+t)}),e.classList.add(`yii-debug-status-`+l(i.status))):t===`time`?(e.textContent=i.time,e.hidden=i.time===``):t===`ajax`&&(e.hidden=!i.ajax)});var o=e.querySelector(`.yii-debug-history-card`);o&&o.setAttribute(`title`,(i.method+` `+(i.fullUrl||i.url)).trim());var s=e.querySelector(`[data-yii-debug-cursor="newest"]`),d=e.querySelector(`[data-yii-debug-cursor="newer"]`),f=e.querySelector(`[data-yii-debug-cursor="older"]`),p=e.querySelector(`[data-yii-debug-cursor="oldest"]`),m=a===0,h=a===t.length-1;s&&(s.disabled=m),d&&(d.disabled=m),f&&(f.disabled=h),p&&(p.disabled=h)}function f(e){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(!(t.top>=0&&t.bottom<=n)){var r=window.scrollY+t.top-n/2+t.height/2;window.scrollTo({top:Math.max(0,r),behavior:`smooth`})}}function p(e){e<0||e>=t.length||e===a||(a=e,d(),f(t[a]))}e.addEventListener(`click`,function(n){var r=n.target.closest(`[data-yii-debug-cursor]`);if(r&&e.contains(r)){if(n.preventDefault(),r.disabled)return;var i=r.getAttribute(`data-yii-debug-cursor`);i===`newer`?p(a-1):i===`older`?p(a+1):i===`newest`?p(0):i===`oldest`&&p(t.length-1)}}),d(),a!==0&&f(t[a])})();var t=3e4;function n(e,t,n){if(e!=null)for(var r=typeof NodeList<`u`&&e instanceof NodeList||Array.isArray(e)?e:[e],i=0;i=0?n.timeout:t,r.onreadystatechange=function(){r.readyState===4&&(r.status>=200&&r.status<300?o():s())},r.ontimeout=s,r.send(n.data||``)}(function(){n(document.querySelectorAll(`.yii-debug-db-explain-toggle`),`click`,function(e){e.preventDefault();var t=this.closest(`.yii-debug-db-explain`),n=t.querySelector(`.yii-debug-db-explain-text`),i=t.classList.contains(`is-open`),a=this;if(i){t.classList.remove(`is-open`),a.setAttribute(`aria-expanded`,`false`);return}if(n.dataset.loaded===`1`){t.classList.add(`is-open`),a.setAttribute(`aria-expanded`,`true`);return}t.classList.add(`is-loading`),r(this.href,{success:function(e){n.innerHTML=e.responseText,n.dataset.loaded=`1`,t.classList.remove(`is-loading`),t.classList.add(`is-open`),a.setAttribute(`aria-expanded`,`true`)},error:function(){t.classList.remove(`is-loading`)}})}),n(document.querySelectorAll(`.yii-debug-db-explain-all a`),`click`,function(){for(var e=new MouseEvent(`click`,{cancelable:!0,bubbles:!0}),t=document.querySelectorAll(`.yii-debug-db-explain-toggle`),n=document.querySelectorAll(`.yii-debug-db-explain.is-open`).length>0,r=0,i=t.length;r0&&r.push(s(t,`module`,`modules`)),n>0&&r.push(s(n,`extension`,`extensions`)),e>0&&r.push(s(e,`matching row`,`matching rows`)),r.join(` · `)}function l(e,t){return e+` of `+t}function u(e,t,n){var r=n===null?e:e.filter(function(e){return!!n[e]});return{hidden:r.length===0,open:n===null?e.indexOf(t)!==-1:r.length>0}}function d(e,t){e.hidden=t,e.parentElement&&e.parentElement.tagName===`LI`&&(e.parentElement.hidden=t)}function f(e){e.hidden=!1;var t=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(t){var n=t.getAttribute(`data-yii-debug-phpinfo-total`);n===null&&(n=t.textContent.trim(),t.setAttribute(`data-yii-debug-phpinfo-total`,n)),t.textContent=n}e.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(e.open=e.getAttribute(`data-yii-debug-phpinfo-default-open`)===`true`)}function p(e,t){var n=e.querySelector(`.yii-debug-phpinfo-table-section-count`);if(n){var r=n.getAttribute(`data-yii-debug-phpinfo-total`);r===null&&(r=n.textContent.trim(),n.setAttribute(`data-yii-debug-phpinfo-total`,r)),n.textContent=l(t,r)}}function m(e){i(e.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(e){f(e)}),i(e.querySelectorAll(`tr`)).forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)})}function h(e){e.forEach(function(e){i(e.querySelectorAll(`.yii-debug-phpinfo-table-section.is-directives tr`)).forEach(function(e){if(!e.classList.contains(`h`)){var t=e.querySelector(`th[scope="row"]`),n=i(e.querySelectorAll(`td`));t!==null&&n.length===2&&n[0].textContent.trim()!==n[1].textContent.trim()&&(e.classList.add(`has-local-override`),n[0].title=`Local value differs from master value`)}})})}function g(e){var t=e.querySelector(`[data-yii-debug-phpinfo-search]`),n=e.querySelector(`[data-yii-debug-phpinfo-clear]`),r=e.querySelector(`[data-yii-debug-phpinfo-status]`),s=e.querySelector(`[data-yii-debug-phpinfo-empty]`),f=i(e.querySelectorAll(`.yii-debug-phpinfo-section`)),g=i(e.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)),_=i(e.querySelectorAll(`.yii-debug-phpinfo-extension-group`)),v=e.querySelector(`[data-yii-debug-phpinfo-extensions]`),y=i(e.querySelectorAll(`#phpinfo-overview .yii-debug-phpinfo-overview-hero-section:not(.yii-debug-phpinfo-extensions)`)),b=e.querySelector(`#phpinfo-overview > .yii-debug-disclosure`),x=i(e.querySelectorAll(`.yii-debug-phpinfo-toc-link`)),S=i(e.querySelectorAll(`[data-yii-debug-phpinfo-toc-group]`)),C=Object.create(null),w=Object.create(null),T=!1,E=!1,D,O;if(!f.length)return;f.forEach(function(e){e.id!==``&&(C[e.id]=e)}),g.forEach(function(e){w[e.id]=e});function k(){g.forEach(function(e){e.hidden=!1,e.classList.remove(`is-search-match`)}),_.forEach(function(e){e.hidden=!1;var t=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);t&&(t.textContent=t.getAttribute(`data-yii-debug-phpinfo-total`))}),y.forEach(function(e){e.hidden=!1}),b&&(b.hidden=!1)}function A(){E||=(T=v?v.open:!1,!0)}function j(){E&&=(v&&(v.open=T),!1)}function M(e,t){x.forEach(function(n){var r=n.getAttribute(`data-toc-target`)||``,i=r===e;n.classList.toggle(`is-active`,i),i?n.setAttribute(`aria-current`,`page`):n.removeAttribute(`aria-current`),d(n,t!==null&&!t[r])}),S.forEach(function(n){var r=u(i(n.querySelectorAll(`.yii-debug-phpinfo-toc-link`)).map(function(e){return e.getAttribute(`data-toc-target`)||``}),e,t);n.hidden=r.hidden,n.open=r.open})}function N(){k(),f.forEach(function(e){m(e),e.hidden=e.id!==O}),M(O,null),r&&(r.textContent=``),s&&(s.hidden=!0),n&&(n.hidden=!0)}function P(e){!window.history||!window.history.replaceState||window.history.replaceState(null,``,`#`+e)}function F(e,n){j(),O=C[e]?e:f[0].id,t&&(t.value=``),N(),n&&P(O)}function I(){var e=a(t?t.value:``);if(!e){j(),N();return}A();var u=Object.create(null),d=0,h=0,x=0;k(),f.forEach(function(t){m(t);var n=a(t.getAttribute(`data-section`)).indexOf(e)!==-1,r=0,s=0;n?h++:t.id===`phpinfo-overview`?(g.forEach(function(t){var n=o(t.getAttribute(`data-section`),t.textContent,e);t.hidden=!n,t.classList.toggle(`is-search-match`,n),n&&s++}),_.forEach(function(e){var t=i(e.querySelectorAll(`[data-yii-debug-phpinfo-compact-module]`)).filter(function(e){return!e.hidden}),n=e.querySelector(`[data-yii-debug-phpinfo-extension-group-count]`);e.hidden=t.length===0,n&&t.length>0&&(n.textContent=l(t.length,n.getAttribute(`data-yii-debug-phpinfo-total`)))}),v&&(v.open=s>0),y.forEach(function(e){e.hidden=!0}),b&&(b.hidden=!0)):t.classList.contains(`yii-debug-phpinfo-module`)&&i(t.querySelectorAll(`.yii-debug-table-wrap`)).forEach(function(t){var n=i(t.querySelectorAll(`tr`)),o=n.filter(function(t){var n=t.querySelector(`th[scope="row"], th.e, td.e`);return n!==null&&a(n.textContent).indexOf(e)!==-1});t.hidden=o.length===0,r+=o.length,p(t,o.length),t.hasAttribute(`data-yii-debug-phpinfo-collapsible`)&&(t.open=o.length>0);var s=new Set(o);n.forEach(function(e){var t=s.has(e),n=e.classList.contains(`h`);e.hidden=!t&&!(n&&o.length>0),e.classList.toggle(`is-search-match`,t)})});var c=n||r>0||s>0;t.hidden=!c,c&&(u[t.id]=!0),d+=r,x+=s}),M(``,u),r&&(r.textContent=c(d,h,x)),s&&(s.hidden=d+h+x!==0),n&&(n.hidden=!1)}function L(){window.clearTimeout(D),t&&(t.value=``,t.focus()),j(),N()}function R(e,t){F(`phpinfo-overview`,!1),v&&(v.open=!0),t&&e&&typeof e.scrollIntoView==`function`&&window.setTimeout(function(){e.scrollIntoView({behavior:`smooth`,block:`center`})},0)}h(f);var z=window.location.hash.replace(/^#/,``),B=w[z]||null;O=C[z]?z:B?`phpinfo-overview`:f[0].id,N(),B&&R(B,!0),t&&(t.addEventListener(`input`,function(){window.clearTimeout(D),D=window.setTimeout(I,120)}),t.addEventListener(`keydown`,function(e){e.key===`Escape`&&t.value!==``&&(e.preventDefault(),L())})),n&&n.addEventListener(`click`,L),x.forEach(function(e){e.addEventListener(`click`,function(t){var n=e.getAttribute(`data-toc-target`)||``;C[n]&&(t.preventDefault(),F(n,!0))})}),window.addEventListener(`hashchange`,function(){var e=window.location.hash.replace(/^#/,``);C[e]?F(e,!1):w[e]&&R(w[e],!0)})}typeof document<`u`&&g(document),(function(){var e=function(e){if(!e||e.nodeName!==`FORM`)return``;var t=new URLSearchParams;return new FormData(e).forEach(function(e,n){typeof e==`string`&&t.append(n,e)}),t.toString()},t=function(e,t){var n=t.responseText||`Unable to switch user.`,r=e.querySelector(`.debug-userswitch__error`);r||(r=document.createElement(`div`),r.className=`debug-userswitch__error yii-debug-callout yii-debug-callout-danger`,r.setAttribute(`role`,`alert`),e.insertBefore(r,e.firstChild)),r.textContent=n},i=!1,a=function(n){i||(i=!0,r({url:n.action,method:`post`,data:e(n),success:function(){window.top.location.reload()},error:function(e){i=!1,t(n,e)}}))};n(document.getElementById(`debug-userswitch__filter`),`click`,function(e){var t;if(e.target.tagName.toLowerCase()===`td`&&e.target.parentElement.parentElement.tagName.toLowerCase()===`tbody`)t=e.target.parentElement;else if(e.target.tagName.toLowerCase()===`tr`&&e.target.parentElement.tagName.toLowerCase()===`tbody`)t=e.target;else return;var n=document.getElementById(`debug-userswitch__set-identity`);document.getElementById(`user_id`).value=t.dataset.key,a(n),e.stopPropagation()}),n(document.getElementById(`debug-userswitch__reset-identity-button`),`click`,function(e){var t=document.getElementById(`debug-userswitch__reset-identity`);e.preventDefault(),e.stopPropagation(),a(t)})})();var _=`yii_debug_theme`,v=`yii-debug-toolbar-theme`;function y(e){if(!e)return null;let t=String(e).toLowerCase().trim().split(/\s+/),n=t.some(e=>[`dark`,`night`,`black`].includes(e));return n===t.some(e=>[`light`,`day`,`white`].includes(e))?null:n?`dark`:`light`}function b(e=v){try{return window.localStorage?y(localStorage.getItem(e)):null}catch{return null}}function x(){let e=`${v}=`,t=(document.cookie||``).split(`;`).map(e=>e.trim()).find(t=>t.startsWith(e));if(!t)return null;try{return y(decodeURIComponent(t.slice(e.length)))}catch{return null}}function S(e){let t=y(e);if(t){try{localStorage.setItem(v,t)}catch{}try{document.cookie=`${v}=${encodeURIComponent(t)};path=/;max-age=31536000;SameSite=Lax`}catch{}}}function C(e){let t;try{t=new URL(e,window.location.href)}catch{return null}if(t.origin!==window.location.origin)return null;let n=t.searchParams.get(`r`)||``;return!t.pathname.includes(`/debug/`)&&!t.pathname.endsWith(`/debug`)&&!n.startsWith(`debug/`)&&!n.startsWith(`debug%2F`)?null:t}function w(e,t){let n=y(t);if(!n)return e;let r=C(e);return r?(r.searchParams.set(_,n),r.href):e}function T(e){let t=document.querySelectorAll(`a[href]`),n=document.querySelectorAll(`form[action]`),r;for(let n=0;n/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)}function g(e,t,n){var r=e.getAttribute(t);if(!r)return n;try{return JSON.parse(r)}catch{return n}}function _(e){try{return new URL(e,window.location.href)}catch{return null}}function v(e,t){var n=_(e),r=_(t);return n!==null&&r!==null&&n.href===r.href}function y(){return l.length?l[0]:document.querySelector(i)}function b(e,t){for(e&&e.nodeType!==1&&(e=e.parentElement);e&&e.nodeType===1;){if(e.matches(t))return e;e=e.parentElement}return null}var x;function S(e){if(!e)return null;var t=String(e).toLowerCase().trim().split(/\s+/),n=[`dark`,`night`,`black`],r=[`light`,`day`,`white`],i=t.some(function(e){return n.indexOf(e)!==-1});return i===t.some(function(e){return r.indexOf(e)!==-1})?null:i?`dark`:`light`}function C(e){var t=[`data-yii-debug-theme`,`data-bs-theme`,`data-theme`,`data-color-mode`,`data-mode`,`data-theme-mode`],n,r,i;if(!e)return null;for(r=0;r0))return x=r,x;return x=null,x}function D(){return E()!==null}function O(e,t){var n=E();return!n||typeof n.click!=`function`?!1:(e!==t&&n.click(),!0)}function k(e){if(e)try{document.cookie=s+`=`+encodeURIComponent(e)+`;path=/;max-age=31536000;SameSite=Lax`}catch{}}function te(e,t){var n=_(e);if(!n||!t||n.origin!==window.location.origin)return e;var r=n.searchParams.get(`r`)||``;return n.pathname.indexOf(`/debug/`)===-1&&r.indexOf(`debug/`)!==0&&r.indexOf(`debug%2F`)!==0?e:(n.searchParams.set(o,t),n.href)}var A=Object.freeze({ajax:``,asset:``,"chevron-left":``,"chevron-right":``,clock:``,close:``,config:``,db:``,dots:``,dump:``,events:``,"external-link":``,identity:``,inertia:``,logs:``,mail:``,moon:``,"php-alt":``,profiling:``,queue:``,request:``,router:``,security:``,sun:``,timeline:``,user:``});function j(e){var t=A[e];return t?`data:image/svg+xml,`+encodeURIComponent(t):``}var M=Object.freeze([75,150,300,600,900]);function ne(e,t){return e!==404||!Number.isInteger(t)||t<0||t>=M.length?null:M[t]}function re(e,t){return typeof t==`number`?t:e+1}function N(e,t){return e===t}function P(e,t,n,r){var i=!!e;return{url:i?e:n,tag:i?t:r,reload:!i}}function F(e,t,n){if(!e||!t)return null;var r;try{r=new URL(e,n)}catch{return null}return r.searchParams.set(`tag`,t),r.href}function I(e,t,n,r){var i=n+(e?``+r(e)+``:``),a=e?`Yii `+e+` — open configuration`:`Open configuration`;if(!t)return``+i+``;var o=r(t);return``+i+``}function L(e,t,n,r){var i=n+``+r(e)+``;return t?``+i+``:``+i+``}function R(e){return e.some(function(e){return!!e.url})}function z(e,t,n,r){return t?``+r(e)+``:`n/a`}function B(e,t,n){return e?` href="`+n(t)+`" data-debug-url="`+n(e)+`"`:``}function V(e){return e.url&&!R(e.items)?`a`:`div`}function H(e){return e.url?`a`:`span`}function U(e,t){return!!(t&&e.button!==1&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey)}function W(e){return e===`top`||e===`upper`?`top`:`bottom`}function G(e,t,n,r){var i=W(e)===`top`;return r===null?i?t:n-t:i?t-r.top:r.bottom-t}function K(e,t,n,r,i=24){var a=120,o=Math.max(a,r-48);if(t===`Home`)return a;if(t===`End`)return o;if(t!==`ArrowUp`&&t!==`ArrowDown`)return null;var s=W(e)===`top`,c=n+(s&&t===`ArrowDown`||!s&&t===`ArrowUp`?i:-i);return Math.max(a,Math.min(o,c))}var q=`:root,:host{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--yii-debug-font-sans:"IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, helvetica, arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--yii-debug-font-mono:"JetBrains Mono", ui-monospace, sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;--yii-debug-font-display:var(--yii-debug-font-mono);--yii-debug-panel-bg:var(--lightningcss-light,#f2f5f1)var(--lightningcss-dark,#0c120e);--yii-debug-panel-bg-accent:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c14);--yii-debug-panel-surface:var(--lightningcss-light,#fffffff0)var(--lightningcss-dark,#121a15eb);--yii-debug-panel-surface-muted:var(--lightningcss-light,#f6f8f5)var(--lightningcss-dark,#101812);--yii-debug-panel-surface-hover:var(--lightningcss-light,#e9f2ec)var(--lightningcss-dark,#1a241d);--yii-debug-panel-border:var(--lightningcss-light,#5d7a6942)var(--lightningcss-dark,#8fa39633);--yii-debug-panel-border-strong:var(--lightningcss-light,#4660515c)var(--lightningcss-dark,#8fa39652);--yii-debug-panel-text:var(--lightningcss-light,#16211a)var(--lightningcss-dark,#e4ede6);--yii-debug-panel-muted:var(--lightningcss-light,#5c6b60)var(--lightningcss-dark,#8fa396);--yii-debug-panel-link:var(--lightningcss-light,#0b6b4a)var(--lightningcss-dark,#4fd39a);--yii-debug-panel-link-hover:var(--lightningcss-light,#0e8a5f)var(--lightningcss-dark,#7fe4b8);--yii-debug-panel-primary:var(--lightningcss-light,#0e7a55)var(--lightningcss-dark,#2fd08c);--yii-debug-panel-primary-strong:var(--lightningcss-light,#0a5c40)var(--lightningcss-dark,#17a673);--yii-debug-success:var(--lightningcss-light,#128a50)var(--lightningcss-dark,#34c97e);--yii-debug-warning:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#e8a33d);--yii-debug-danger:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-info:var(--lightningcss-light,#2467a8)var(--lightningcss-dark,#5fa8e8);--yii-debug-panel-code-bg:var(--lightningcss-light,#ecf1ec)var(--lightningcss-dark,#17211a);--yii-debug-panel-pill:var(--lightningcss-light,#16211a0f)var(--lightningcss-dark,#8fa3962e);--yii-debug-panel-shadow:var(--lightningcss-light,0 22px 60px #16211a14)var(--lightningcss-dark,0 22px 60px #0006);--yii-debug-verb-get:var(--lightningcss-light,#0b7285)var(--lightningcss-dark,#4dc4d9);--yii-debug-verb-post:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#a78bfa);--yii-debug-verb-put:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#e8a33d);--yii-debug-verb-delete:var(--lightningcss-light,#c93838)var(--lightningcss-dark,#f16a6a);--yii-debug-verb-other:var(--yii-debug-panel-muted);--yii-debug-status-2xx:var(--yii-debug-success);--yii-debug-status-3xx:var(--yii-debug-warning);--yii-debug-status-4xx:var(--lightningcss-light,#c2410c)var(--lightningcss-dark,#fb923c);--yii-debug-status-5xx:var(--yii-debug-danger);--yii-debug-level-error:var(--yii-debug-danger);--yii-debug-level-warning:var(--yii-debug-warning);--yii-debug-level-info:var(--yii-debug-info);--yii-debug-level-trace:var(--yii-debug-panel-muted);--yii-debug-level-profile:var(--lightningcss-light,#9333ea)var(--lightningcss-dark,#b16be8);--yii-debug-level-other:var(--yii-debug-panel-muted);--yii-debug-gauge-fill:var(--yii-debug-panel-primary);--yii-debug-gauge-track:var(--lightningcss-light,#0e7a5529)var(--lightningcss-dark,#2fd08c24);--yii-debug-sql-kw:var(--lightningcss-light,#0a5c40)var(--lightningcss-dark,#4fd39a);--yii-debug-sql-str:var(--lightningcss-light,#8f4e00)var(--lightningcss-dark,#e8a33d);--yii-debug-sql-num:var(--yii-debug-info);--yii-debug-sql-comment:var(--yii-debug-panel-muted);--yii-debug-sql-param:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#a78bfa);--yii-debug-cat-app:var(--lightningcss-light,#0a6b47)var(--lightningcss-dark,#14b06e);--yii-debug-cat-db:var(--lightningcss-light,#0994b8)var(--lightningcss-dark,#0999be);--yii-debug-cat-view:var(--lightningcss-light,#6941c6)var(--lightningcss-dark,#8f6ce8);--yii-debug-cat-cache:var(--lightningcss-light,#b26a00)var(--lightningcss-dark,#c28300);--yii-debug-cat-mail:var(--lightningcss-light,#b23a67)var(--lightningcss-dark,#d95f8f);--yii-debug-cat-queue:var(--lightningcss-light,#3f4dbd)var(--lightningcss-dark,#6d7ce6);--yii-debug-cat-other:var(--yii-debug-panel-muted)}@media (prefers-color-scheme:dark){:root,:host{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-yii-debug-theme=light],:host([data-theme=light]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-yii-debug-theme=dark],:host([data-theme=dark]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:host{--yii-debug-toolbar-drawer-height:50vh;--accent-wash-strong:var(--lightningcss-light,#0e7a5524)var(--lightningcss-dark,#2fd08c29);--accent-wash-soft:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c1a);all:initial;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;z-index:2147483647;font-family:var(--yii-debug-font-sans);color:var(--yii-debug-panel-text);direction:ltr;font-size:12px;line-height:1.35;position:fixed;bottom:16px;right:16px}@media (prefers-color-scheme:dark){:host{--lightningcss-light: ;--lightningcss-dark:initial}}:host([data-position=top]),:host([data-position=upper]){top:16px;bottom:auto}:host([data-theme=dark]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:host([data-theme=light]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.toolbar{max-width:calc(100vw - 32px)}.bar{border:1px solid var(--yii-debug-panel-border);max-width:100%;box-shadow:var(--lightningcss-light,0 20px 60px #16211a2e)var(--lightningcss-dark,0 20px 60px #0006), 0 1px 0 var(--lightningcss-light,#ffffffd9)var(--lightningcss-dark,#ffffff0f) inset;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-sizing:border-box;background:var(--lightningcss-light,#fffffff5)var(--lightningcss-dark,#0d130ff2);border-radius:18px;align-items:center;gap:8px;padding:7px;display:flex;position:relative}.expanded .bar{border-radius:16px;width:calc(100vw - 32px);overflow:visible}.drawer-open .bar{border-bottom-color:#0000;border-radius:16px 16px 0 0}.brand{border:1px solid var(--yii-debug-panel-border);min-height:32px;color:var(--yii-debug-panel-text);background:linear-gradient(135deg, var(--accent-wash-strong), var(--lightningcss-light,#ffffffeb)var(--lightningcss-dark,#101813e0) 55%);white-space:nowrap;box-sizing:border-box;border-radius:999px;flex:none;align-items:center;gap:0;padding:3px 8px;text-decoration:none;transition:transform .16s,border-color .16s,box-shadow .16s;display:inline-flex;box-shadow:inset 0 1px var(--lightningcss-light,#ffffffd9)var(--lightningcss-dark,#ffffff14)}.brand:hover,.brand:focus{border-color:var(--yii-debug-panel-primary);outline:0;transform:translateY(-1px);box-shadow:inset 0 1px var(--lightningcss-light,#ffffffe6)var(--lightningcss-dark,#ffffff1a),0 0 0 3px var(--lightningcss-light,#0e7a551f)var(--lightningcss-dark,#2fd08c24)}.brand-opener{cursor:pointer}.brand img,.brand-mark{flex:none;justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex}.brand img{object-fit:contain}.brand-mark{background:linear-gradient(135deg, var(--yii-debug-panel-primary), var(--yii-debug-success));color:#fff;border-radius:999px;font-weight:800;box-shadow:inset 0 0 0 1px #ffffff29}.brand-text{display:none}.brand-link{color:var(--yii-debug-panel-text);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:center;gap:6px;padding:2px 6px;text-decoration:none;transition:background .12s;display:inline-flex}.brand-link:hover,.brand-link:focus{color:var(--yii-debug-panel-text);background:var(--lightningcss-light,#16211a0f)var(--lightningcss-dark,#ffffff14);outline:0;text-decoration:none}.brand-static,.brand-static:hover{cursor:default;background:0 0}.brand-divider{background:var(--yii-debug-panel-border-strong);width:1px;height:18px;margin:0 4px;display:inline-block}.brand-version{border:1px solid var(--yii-debug-panel-border);min-height:18px;color:var(--yii-debug-panel-text);font-family:var(--yii-debug-font-mono);letter-spacing:.01em;white-space:nowrap;background:var(--lightningcss-light,#16211a0d)var(--lightningcss-dark,#ffffff14);border-radius:999px;align-items:center;padding:0 7px;font-size:11px;font-weight:700;line-height:18px;display:inline-flex}.opener-icon{width:20px;height:24px;color:var(--yii-debug-panel-primary);justify-content:center;align-items:center;font-size:20px;font-weight:750;line-height:1;display:inline-flex}.panels{scrollbar-width:none;align-items:center;gap:6px;min-width:0;display:none;overflow:auto hidden}.panels::-webkit-scrollbar{width:0;height:0;display:none}.expanded .panels{flex:1;display:flex}.panel{border:1px solid var(--yii-debug-panel-border);max-width:260px;min-height:32px;color:var(--yii-debug-panel-text);white-space:nowrap;box-sizing:border-box;cursor:default;font:inherit;background:var(--lightningcss-light,#ffffffe0)var(--lightningcss-dark,#141d17d1);border-radius:999px;align-items:center;gap:6px;padding:3px 10px;text-decoration:none;transition:background-color .16s,border-color .16s,box-shadow .16s;display:inline-flex;position:relative;box-shadow:inset 0 1px var(--lightningcss-light,#fffc)var(--lightningcss-dark,#ffffff0f)}.panel[data-debug-url]{cursor:pointer}.panel[data-debug-url]:hover,.panel[data-debug-url]:focus,.panel:focus-within,.panel-active{border-color:var(--yii-debug-panel-primary);box-shadow:0 1px 0 var(--lightningcss-light,#ffffffdb)var(--lightningcss-dark,#ffffff14) inset, 0 0 0 3px var(--accent-wash-soft);background:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c1f);outline:0}.panel:has(.panel-link:hover){border-color:var(--yii-debug-panel-primary);box-shadow:0 1px 0 var(--lightningcss-light,#ffffffdb)var(--lightningcss-dark,#ffffff14) inset, 0 0 0 3px var(--accent-wash-soft);background:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c1f);outline:0}.panel-active{background:var(--lightningcss-light,#0e7a5529)var(--lightningcss-dark,#2fd08c2e)}.panel-link{min-width:0;color:inherit;outline:0;align-items:center;gap:6px;text-decoration:none;display:inline-flex}.panel-title{letter-spacing:.005em;color:var(--yii-debug-panel-text);text-overflow:ellipsis;font-weight:650;overflow:hidden}.metric{min-width:0;color:inherit;align-items:center;gap:5px;text-decoration:none;display:inline-flex}.metric[data-debug-url]{cursor:pointer}.metric-label{color:var(--yii-debug-panel-muted);font-size:11px}.metric-icon,.panel-icon{background-color:currentColor;flex:none;width:14px;height:14px;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.panel-icon{color:var(--yii-debug-panel-primary);margin-right:2px}.metric-icon{color:var(--yii-debug-panel-muted)}.panel-icon-php{color:var(--lightningcss-light,#4f5b93)var(--lightningcss-dark,#a3aedb);width:32px}.metric-value{border:1px solid var(--yii-debug-panel-border);min-height:18px;color:var(--yii-debug-panel-text);background:var(--yii-debug-panel-pill);font-family:var(--yii-debug-font-mono);font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;padding:0 7px;font-size:11px;font-weight:700;line-height:18px;display:inline-flex;box-shadow:inset 0 1px var(--lightningcss-light,#ffffffd1)var(--lightningcss-dark,#ffffff14)}.badge{border:1px solid var(--yii-debug-panel-border);min-height:18px;font-family:var(--yii-debug-font-mono);font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;padding:0 7px;font-size:11px;font-weight:700;line-height:18px;display:inline-flex}.metric[data-debug-url]:hover .metric-value,.metric[data-debug-url]:focus .metric-value,.metric-active .metric-value{box-shadow:0 0 0 3px var(--accent-wash-strong), 0 1px 0 var(--lightningcss-light,#ffffffd1)var(--lightningcss-dark,#ffffff14) inset}.badge-status-2xx,.badge-success{--badge-hue:var(--yii-debug-status-2xx)}.badge-status-3xx{--badge-hue:var(--yii-debug-status-3xx)}.badge-status-4xx{--badge-hue:var(--yii-debug-status-4xx)}.badge-status-5xx{--badge-hue:var(--yii-debug-status-5xx)}.badge-info,.badge-loading{--badge-hue:var(--yii-debug-info)}.badge-warning{--badge-hue:var(--yii-debug-warning)}.badge-danger{--badge-hue:var(--yii-debug-danger)}.badge-cross-request{--badge-hue:var(--yii-debug-cat-mail)}.badge-status-2xx,.badge-status-3xx,.badge-status-4xx,.badge-status-5xx,.badge-success,.badge-info,.badge-loading,.badge-warning,.badge-danger,.badge-cross-request{border-color:color-mix(in srgb, var(--badge-hue), transparent 65%);background:color-mix(in srgb, var(--badge-hue), transparent 90%);color:color-mix(in srgb, var(--badge-hue) 80%, var(--yii-debug-panel-text))}.verb-get{color:color-mix(in srgb, var(--yii-debug-verb-get) 80%, var(--yii-debug-panel-text))}.verb-post{color:color-mix(in srgb, var(--yii-debug-verb-post) 80%, var(--yii-debug-panel-text))}.verb-put{color:color-mix(in srgb, var(--yii-debug-verb-put) 80%, var(--yii-debug-panel-text))}.verb-delete{color:color-mix(in srgb, var(--yii-debug-verb-delete) 80%, var(--yii-debug-panel-text))}.verb-other{color:color-mix(in srgb, var(--yii-debug-verb-other) 80%, var(--yii-debug-panel-text))}.badge-default{background:var(--yii-debug-panel-pill);color:var(--yii-debug-panel-text)}.ajax-panel{display:none;position:static}.expanded .ajax-panel{display:inline-flex}.ajax-popover{border:1px solid var(--yii-debug-panel-border);width:min(680px,100vw - 32px);max-height:360px;box-shadow:var(--lightningcss-light,0 20px 60px #16211a29)var(--lightningcss-dark,0 20px 60px #00000073);box-sizing:border-box;background:var(--lightningcss-light,#fffffffa)var(--lightningcss-dark,#0d130ffa);border-radius:16px;padding:10px;display:none;position:absolute;bottom:calc(100% + 10px);right:0;overflow:auto}.position-top .ajax-popover{top:calc(100% + 10px);bottom:auto}.ajax-panel:hover .ajax-popover,.ajax-panel:focus-within .ajax-popover{display:block}.ajax-popover table{border-spacing:0;border-collapse:collapse;width:100%;color:var(--yii-debug-panel-text)}.ajax-popover th,.ajax-popover td{border-bottom:1px solid var(--yii-debug-panel-border);text-align:left;vertical-align:top;padding:6px 8px}.ajax-popover th{color:var(--yii-debug-panel-muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.ajax-url{text-overflow:ellipsis;white-space:nowrap;max-width:280px;overflow:hidden}.ajax-link{color:var(--yii-debug-panel-link);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:none}.empty{color:var(--yii-debug-panel-muted);text-align:center}.controls{align-items:center;gap:4px;margin-left:auto;display:inline-flex}.control{border:1px solid var(--yii-debug-panel-border);width:34px;height:34px;color:var(--yii-debug-panel-text);cursor:pointer;box-sizing:border-box;background:var(--lightningcss-light,#ffffffe6)var(--lightningcss-dark,#18221bcc);border-radius:999px;justify-content:center;align-items:center;font:700 18px/1 ui-sans-serif,system-ui;text-decoration:none;transition:background-color .16s,border-color .16s,box-shadow .16s,color .16s;display:inline-flex;box-shadow:inset 0 1px var(--lightningcss-light,#ffffffd1)var(--lightningcss-dark,#ffffff0f)}.control:hover,.control:focus{border-color:var(--yii-debug-panel-primary);color:var(--yii-debug-panel-primary-strong);box-shadow:0 1px 0 var(--lightningcss-light,#ffffffe0)var(--lightningcss-dark,#ffffff14) inset, 0 0 0 3px var(--accent-wash-soft);background:var(--lightningcss-light,#0e7a551a)var(--lightningcss-dark,#2fd08c24);outline:0}.control.disabled,.control.disabled:hover,.control.disabled:focus{border-color:var(--yii-debug-panel-border);box-shadow:none;color:var(--yii-debug-panel-muted);opacity:.6;cursor:default;background:var(--lightningcss-light,#16211a0a)var(--lightningcss-dark,#18221b80);transform:none}.control-icon{background-color:currentColor;flex:none;width:16px;height:16px;transition:transform .25s;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.toggle-theme:hover .control-icon{transform:rotate(20deg)}.drawer{width:calc(100vw - 32px);height:var(--yii-debug-toolbar-drawer-height);border:1px solid var(--yii-debug-panel-border);background:var(--yii-debug-panel-bg);box-shadow:var(--lightningcss-light,0 26px 70px #16211a2e)var(--lightningcss-dark,0 26px 70px #0000006b);box-sizing:border-box;border-top-color:#0000;border-radius:0 0 16px 16px;overflow:hidden}.drawer iframe{background:var(--yii-debug-panel-bg);border:0;width:100%;height:100%;display:block}.resize-handle{background:linear-gradient(90deg, transparent, var(--yii-debug-panel-primary) 30%, var(--yii-debug-success) 70%, transparent);opacity:.55;cursor:ns-resize;z-index:1;border:0;border-radius:999px;width:auto;height:6px;margin:0 18px -3px;padding:0;display:block;position:relative}.resize-handle:focus-visible{outline:3px solid var(--yii-debug-panel-primary);outline-offset:3px;opacity:1}.position-top .resize-handle{margin:-3px 18px 0}.error-message{color:var(--yii-debug-danger);margin-left:8px}@media (max-width:767px){:host{bottom:8px;right:8px}.toolbar{max-width:calc(100vw - 16px)}.expanded .bar,.drawer{width:calc(100vw - 16px)}.expanded .bar{flex-wrap:wrap;align-items:flex-start}.expanded .panels{flex:0 0 100%;order:3;width:100%;padding-top:4px}.panel{max-width:100%}.drawer{height:min(var(--yii-debug-toolbar-drawer-height), 70vh)}}@media print{:host{display:none!important}}`;function J(){var e=Reflect.construct(HTMLElement,[],J);return e.attachShadow({mode:`open`}),e.data=null,e.ajaxRequests=c,e.activeUrl=``,e.expanded=p(a)===`1`,e.drawerOpen=!1,e.restoreFocusUrl=null,e.resizing=!1,e.currentTag=null,e.lastLoadedTag=null,e.lastLoadedUrl=null,e.loadGeneration=0,e.boundPointerMove=e.onPointerMove.bind(e),e.boundPointerUp=e.onPointerUp.bind(e),e.boundHostThemeRefresh=e.refreshHostThemeControl.bind(e),e.boundThemeRefresh=e.refreshTheme.bind(e),e.theme=null,e.themeObserver=null,e.themeRefreshTimer=null,e.systemThemeQuery=null,e.ownsTheme=!1,e}J.prototype=Object.create(HTMLElement.prototype),J.prototype.constructor=J,Object.setPrototypeOf(J,HTMLElement),J.prototype.connectedCallback=function(){l.indexOf(this)===-1&&l.push(this),T(),this.ownsTheme=!D(),this.refreshTheme(),this.watchTheme(),this.load(),window.addEventListener(`load`,this.boundHostThemeRefresh,!1),this.themeRefreshTimer=window.setTimeout(this.boundHostThemeRefresh,1500)},J.prototype.disconnectedCallback=function(){var e=l.indexOf(this);e!==-1&&l.splice(e,1),this.themeObserver&&=(this.themeObserver.disconnect(),null),this.systemThemeQuery&&=(this.systemThemeQuery.removeEventListener?this.systemThemeQuery.removeEventListener(`change`,this.boundThemeRefresh):this.systemThemeQuery.removeListener&&this.systemThemeQuery.removeListener(this.boundThemeRefresh),null),window.removeEventListener(`storage`,this.boundThemeRefresh,!1),window.removeEventListener(`load`,this.boundHostThemeRefresh,!1),this.themeRefreshTimer!==null&&(window.clearTimeout(this.themeRefreshTimer),this.themeRefreshTimer=null),this.boundThemeMessage&&=(window.removeEventListener(`message`,this.boundThemeMessage,!1),null),this.resizing=!1,document.removeEventListener(`pointermove`,this.boundPointerMove,!1),document.removeEventListener(`pointerup`,this.boundPointerUp,!1)},J.prototype.setAjaxRequests=function(e){this.ajaxRequests=e,this.render()},J.prototype.detectTheme=function(){return C(document.documentElement)||C(document.body)||(this.ownsTheme?S(this.getAttribute(`data-yii-debug-theme`))||S(p(`yii-debug-toolbar-theme`))||ee()||w()||(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`):w()||`light`)},J.prototype.toggleTheme=function(){var e=this.theme===`dark`?`light`:`dark`;if(O(e,this.detectTheme())){this.refreshTheme(),r(this.shadowRoot,`.toggle-theme`);return}this.theme=e,this.setAttribute(`data-theme`,e),this.setAttribute(`data-yii-debug-theme`,e),m(s,e),k(e),this.propagateThemeToHost(e),this.render(),r(this.shadowRoot,`.toggle-theme`)},J.prototype.propagateThemeToHost=function(e){var t=document.documentElement,n=e===`dark`?`light`:`dark`,r=[`theme`,`color-theme`,`color-scheme`,`vueuse-color-scheme`,`vite-ui-theme`],i;for(t&&(t.classList&&(t.classList.add(e),t.classList.remove(n)),t.setAttribute(`data-theme`,e),t.setAttribute(`data-bs-theme`,e),t.style.colorScheme=e),i=0;i
Yii Debugger`+h(e)+`
`},J.prototype.getPosition=function(){return W(this.getAttribute(`data-position`)||this.data&&this.data.position)},J.prototype.render=function(){if(this.data){this.ensureShadowSkeleton();var e=this.getPosition();this.setAttribute(`data-position`,e);var t=[`toolbar`,`position-`+e];this.expanded&&t.push(`expanded`),this.drawerOpen&&t.push(`drawer-open`);var n=(this.data.items||[]).find(function(e){return e&&e.id===`profiling`}),r=n?this.renderPanel(n):``;this.contentRoot.innerHTML=`
`+(this.expanded?this.renderBrand()+r+this.renderAjaxPanel()+this.renderPanels([`profiling`])+this.renderControls():this.renderCollapsedOpener())+`
`+this.renderDrawer(e)+`
`,this.bindEvents(),this.applyDrawerHeight()}},J.prototype.renderLogo=function(){var e=this.data.logo||this.data.logoFallback;return e?``:`Y`},J.prototype.renderCollapsedOpener=function(){var e=h(this.data.title||`Yii Debugger`);return``},J.prototype.renderBrand=function(){var e=this.data.configUrl||this.data.indexUrl,t=I(this.data.yiiVersion,e?this.withTheme(e):null,this.renderLogo(),h),n=``;this.data.phpVersion&&(n=L(this.data.phpVersion,this.data.phpInfoUrl?this.withTheme(this.data.phpInfoUrl):null,this.iconHtml(`php-alt`,`panel-icon panel-icon-php`),h));var r=n?``:``;return`
`+t+r+n+`
`};function Y(e){if(e.loading)return`badge-loading`;var t=parseInt(e.statusCode,10);return t>=500?`badge-status-5xx`:t>=400?`badge-status-4xx`:t>=300?`badge-status-3xx`:t>=200?`badge-status-2xx`:`badge-danger`}function ie(e){var t=(e||``).toUpperCase();return t===`GET`||t===`HEAD`?`verb-get`:t===`POST`?`verb-post`:t===`PUT`||t===`PATCH`?`verb-put`:t===`DELETE`?`verb-delete`:`verb-other`}J.prototype.renderAjaxPanel=function(){var e=`success`,t=this.ajaxRequests||[],n=t.slice(Math.max(0,t.length-20)),r=``,i=this.iconHtml(`ajax`,`panel-icon`);return t.forEach(function(n,r){n.loading?e=`loading`:n.error&&r>t.length-4&&(e=`danger`)}),n.forEach(function(e){var t=e.profilerUrl,n=z(e.profile,t,t?this.withTheme(t):null,h);r+=``+h(e.method||`GET`)+``+h(e.statusCode||`-`)+``+h(e.url)+``+h(e.duration?e.duration+` ms`:`-`)+``+n+``},this),r===``&&(r=`No AJAX requests tracked yet.`),`
`+i+`AJAX`+t.length+`
`+r+`
MethodStatusURLTimeProfile
`},J.prototype.renderPanels=function(e){var t=``,n=this.data.items||[],r=e||[];return n.forEach(function(e){!e||r.indexOf(e.id)!==-1||(t+=this.renderPanel(e))},this),`
`+t+`
`},J.prototype.isPanelActive=function(e){var t=e.items||[];if(!this.activeUrl)return!1;if(e.url&&v(e.url,this.activeUrl))return!0;for(var n=0;n