dsh-zen-remote 2.3.5 → 2.3.7
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/AGENTS.md +15 -5
- package/CHANGELOG.md +71 -0
- package/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/docs/interface.md +12 -6
- package/docs/plugin-bridge.md +2 -2
- package/docs/remote-access.en.md +9 -3
- package/docs/remote-access.md +9 -3
- package/lan-gate.mjs +7 -0
- package/lib/adapters/dsh-better-sidebar/index.js +31 -2
- package/lib/adapters/dsh-better-sidebar/index.js.map +1 -1
- package/lib/client-pairing.js +10 -0
- package/lib/client-pairing.js.map +1 -1
- package/lib/client-routes.js +183 -94
- package/lib/client-routes.js.map +1 -1
- package/lib/client.js +589 -97
- package/lib/debug-redact.js +253 -0
- package/lib/debug-redact.js.map +1 -0
- package/lib/debug-report.js +60 -0
- package/lib/debug-report.js.map +1 -0
- package/lib/fetch-route-intercept.js +23 -0
- package/lib/fetch-route-intercept.js.map +1 -1
- package/lib/index.js +306 -45
- package/lib/index.js.map +1 -1
- package/lib/intercept.js +43 -1
- package/lib/intercept.js.map +1 -1
- package/lib/log-ring.js +76 -0
- package/lib/log-ring.js.map +1 -0
- package/lib/plugin-adapter-core.js +30 -1
- package/lib/plugin-adapter-core.js.map +1 -1
- package/lib/plugin-route-intercept.js +506 -11
- package/lib/plugin-route-intercept.js.map +1 -1
- package/lib/plugin-tunnel.js +210 -18
- package/lib/plugin-tunnel.js.map +1 -1
- package/lib/types/adapters/dsh-better-sidebar/index.d.ts +5 -2
- package/lib/types/adapters/dsh-better-sidebar/index.d.ts.map +1 -1
- package/lib/types/client/MobileSessionInfo.d.ts.map +1 -1
- package/lib/types/client/effects/remote-drop.d.ts +20 -8
- package/lib/types/client/effects/remote-drop.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +10 -1
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/settings/SettingsSection.d.ts.map +1 -1
- package/lib/types/client/styles/content.css.d.ts +1 -1
- package/lib/types/client/styles/content.css.d.ts.map +1 -1
- package/lib/types/client/styles/layout.css.d.ts +1 -1
- package/lib/types/client/styles/layout.css.d.ts.map +1 -1
- package/lib/types/client/styles/misc.css.d.ts +1 -1
- package/lib/types/client/styles/misc.css.d.ts.map +1 -1
- package/lib/types/client-data/remote-drop.d.ts +64 -0
- package/lib/types/client-data/remote-drop.d.ts.map +1 -1
- package/lib/types/client-data/settings-form.d.ts +3 -0
- package/lib/types/client-data/settings-form.d.ts.map +1 -1
- package/lib/types/client-pairing.d.ts +8 -0
- package/lib/types/client-pairing.d.ts.map +1 -1
- package/lib/types/client-routes.d.ts +23 -0
- package/lib/types/client-routes.d.ts.map +1 -1
- package/lib/types/debug-redact.d.ts +68 -0
- package/lib/types/debug-redact.d.ts.map +1 -0
- package/lib/types/debug-report.d.ts +58 -0
- package/lib/types/debug-report.d.ts.map +1 -0
- package/lib/types/fetch-route-intercept.d.ts +26 -0
- package/lib/types/fetch-route-intercept.d.ts.map +1 -1
- package/lib/types/index.d.ts +7 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/intercept.d.ts +6 -0
- package/lib/types/intercept.d.ts.map +1 -1
- package/lib/types/log-ring.d.ts +57 -0
- package/lib/types/log-ring.d.ts.map +1 -0
- package/lib/types/plugin-adapter-core.d.ts.map +1 -1
- package/lib/types/plugin-route-intercept.d.ts +8 -0
- package/lib/types/plugin-route-intercept.d.ts.map +1 -1
- package/lib/types/plugin-tunnel.d.ts +37 -2
- package/lib/types/plugin-tunnel.d.ts.map +1 -1
- package/package.json +3 -2
- package/pwa/app.css +13 -2
- package/scripts/check-debug-report.mjs +277 -0
- package/scripts/check-info-sheet-stacking.mjs +85 -0
- package/scripts/check-remote-drop.mjs +130 -0
- package/scripts/check-tablet-safe-area.mjs +49 -0
- package/src/adapters/dsh-better-sidebar/index.ts +31 -2
- package/src/client/MobileSessionInfo.tsx +29 -2
- package/src/client/effects/remote-drop.ts +271 -24
- package/src/client/locales.ts +24 -4
- package/src/client/settings/SettingsSection.tsx +120 -3
- package/src/client/styles/content.css.ts +44 -14
- package/src/client/styles/layout.css.ts +9 -3
- package/src/client/styles/misc.css.ts +38 -0
- package/src/client-data/remote-drop.ts +103 -0
- package/src/client-data/settings-form.ts +3 -0
- package/src/client-pairing.ts +11 -0
- package/src/client-routes.ts +196 -90
- package/src/debug-redact.ts +290 -0
- package/src/debug-report.ts +93 -0
- package/src/fetch-route-intercept.ts +29 -0
- package/src/index.ts +295 -43
- package/src/intercept.ts +46 -0
- package/src/log-ring.ts +101 -0
- package/src/plugin-adapter-core.ts +29 -2
- package/src/plugin-route-intercept.ts +516 -12
- package/src/plugin-tunnel.ts +230 -20
package/lib/plugin-tunnel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-tunnel.js","sourceRoot":"","sources":["../src/plugin-tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAA;AAGhD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAA;AACvI,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AA0BnH;;;;;uEAKuE;AACvE,SAAS,cAAc,CAAC,KAA4B;IAClD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;QAChD,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;QAC/B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE,KAAK;KACb,CAAA;AACH,CAAC;AAED;;;;;;;;;;iCAUiC;AACjC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAA+E,EAC/E,MAAgH,EAChH,YAA4C,EAC5C,YAAmC;IAEnC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1D,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;IACxF,IAAI,WAAW,CAAC,OAAO,KAAK,MAAM,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAA;IAC5D,CAAC;IACD,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,0EAA0E;IAC1E,yEAAyE;IACzE,wCAAwC;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IACrH,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAA;IACpF,0EAA0E;IAC1E,kEAAkE;IAClE,+DAA+D;IAC/D,uEAAuE;IACvE,IAAI,yBAAyB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;IACxD,CAAC;IACD,IAAI,MAAuB,CAAA;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,SAAiB,CAAA;IACrB,IAAI,YAAgC,CAAA;IACpC,IAAI,OAAO,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACrD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;QACjG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QACjF,SAAS,GAAG,OAAO,CAAA;IACrB,CAAC;SAAM,CAAC;QACN,IAAI,UAAmB,CAAA;QACvB,IAAI,OAAO,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,YAAY,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;YACtF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;YACtD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;YACnF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;YACjF,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC5B,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,CAAC;QACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC1F,oEAAoE;QACpE,oEAAoE;QACpE,wBAAwB;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;QAC7E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QACrF,CAAC;QACD,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,GAA4B,EAAE,CAAA;QACzC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,CAAA;QACd,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;IACjG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACzJ,CAAC;AAED;;4BAE4B;AAC5B,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAA;AAEhD,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAA;AAE9C,qCAAqC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAEvC,oEAAoE;AACpE,MAAM,qBAAqB,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,0BAA0B,CAAU,CAAA;AAE3I,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;qCACqC;AACrC,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACvF,OAAO,KAAK,CAAA;AACd,CAAC;AAkCD;6BAC6B;AAC7B,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEzC;;eAEW;IACX,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAU,EAAE,MAAqE,EAAQ,EAAE;QAC3H,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM;YAAE,OAAM;QACtC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAClB,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1E,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAChD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,GAAmB,EAAE,KAA8B,EAAW,EAAE;QACjF,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa;YAAE,OAAO,KAAK,CAAA;QACpD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IACrE,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,GAAoB,EAAU,EAAE;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,CAAC,CAAA;IAED,iDAAiD;IACjD,MAAM,OAAO,GAAG,CAAC,GAAoB,EAAE,IAAY,EAAsB,EAAE;QACzE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC,CAAA;IAED,OAAO;QACL,WAAW;YACT,OAAO,OAAO,CAAC,IAAI,CAAA;QACrB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG;YACjB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC7B,uEAAuE;YACvE,qEAAqE;YACrE,IAAI,IAA6B,CAAA;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;gBACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;oBAC9B,IAAI,IAAK,KAAgB,CAAC,MAAM,CAAA;oBAChC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;wBACvB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;wBAC7C,OAAM;oBACR,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAA;gBAC/C,CAAC;gBACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAA;gBAClF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,MAAM,CAAA;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;YACpE,uEAAuE;YACvE,iEAAiE;YACjE,sEAAsE;YACtE,mDAAmD;YACnD,KAAK,MAAM,QAAQ,IAAI,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,EAAE,CAAC;gBAC9E,IAAI,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;oBACjG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAA;YACtG,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC9G,8DAA8D;YAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,IAAI,IAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;gBACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG;gBACb,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE;gBAC7C,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,IAAI,EAAE;gBACxD,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,IAAI,EAAE;gBACtD,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE;gBAC1C,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE;aAC3C,CAAA;YACD,IACE,MAAM,CAAC,UAAU,KAAK,EAAE,IAAI,MAAM,CAAC,aAAa,KAAK,EAAE,IAAI,MAAM,CAAC,YAAY,KAAK,EAAE;gBACrF,MAAM,CAAC,SAAS,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAC5D,CAAC;gBACD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,uEAAuE;YACvE,+DAA+D;YAC/D,uCAAuC;YACvC,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;YACjF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC1D,OAAM;YACR,CAAC;YACD,iEAAiE;YACjE,qDAAqD;YACrD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;gBAC1G,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;gBACnC,OAAM;YACR,CAAC;YAED,mEAAmE;YACnE,oEAAoE;YACpE,2DAA2D;YAC3D,IAAI,MAAc,CAAA;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAA;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAA;gBAC5C,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAA;YAClC,IAAI,QAAgB,CAAA;YACpB,IAAI,CAAC;gBACH,oEAAoE;gBACpE,iEAAiE;gBACjE,sDAAsD;gBACtD,QAAQ;oBACN,MAAM,CAAC,QAAQ,KAAK,QAAQ;wBAC1B,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;wBAC1G,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YACD,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACxE,MAAM,MAAM,GAAW;gBACrB,MAAM;gBACN,QAAQ;gBACR,GAAG;gBACH,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;oBAC1B,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;gBAClC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;aACxB,CAAA;YACD,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,UAAU;gBAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAEvB,qEAAqE;YACrE,oEAAoE;YACpE,sDAAsD;YACtD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,qCAAqC;gBACrD,eAAe,EAAE,wBAAwB;gBACzC,mBAAmB,EAAE,IAAI;aAC1B,CAAC,CAAA;YACF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;YAEnF,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAA;YACxC,MAAM,YAAY,GAAG;gBACnB,OAAO,MAAM,CAAC,SAAS,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,WAAW;gBACpE,mBAAmB,MAAM,CAAC,IAAI,EAAE;gBAChC,qBAAqB;gBACrB,oBAAoB;gBACpB,sBAAsB,KAAK,EAAE;gBAC7B,0BAA0B,SAAS,EAAE;gBACrC,GAAG,CAAC,UAAU,EAAE,CAAC,wBAAwB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,2BAA2B,gBAAgB,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtJ,GAAG,CAAC,UAAU,EAAE,CAAC,0BAA0B,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,6BAA6B,gBAAgB,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5J,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM;aACP,CAAA;YACD,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YACzC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAEzC,wEAAwE;YACxE,yEAAyE;YACzE,wEAAwE;YACxE,sEAAsE;YACtE,kEAAkE;YAClE,wDAAwD;YACxD,IAAI,gBAAgB,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9C,MAAM,cAAc,GAAG,GAAS,EAAE;gBAChC,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;oBACnE,gBAAgB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wBACrE,QAAQ,CAAC,KAAK,EAAE,CAAA;wBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;wBAC1C,OAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC,CAAA;YACD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACpC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAA;gBAC3D,cAAc,EAAE,CAAA;YAClB,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACxB,mEAAmE;gBACnE,8BAA8B;gBAC9B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACxE,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;oBAC1E,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,CAAC;gBACD,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAA;YACzC,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACxB,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAA;YACxC,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,oDAAoD;gBACpD,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAA;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,CAAA;YAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,qEAAqE;gBACrE,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;YAC1B,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC/B,+DAA+D;gBAC/D,6DAA6D;gBAC7D,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAA;gBAClD,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;gBAC3C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;YAC5D,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,qBAAqB,EAAE,CAAC;gBAC9E,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,IAAI,IAAI,GAAG,KAAK,CAAA;YAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBAC9B,IAAI,IAAK,KAAgB,CAAC,MAAM,CAAA;gBAChC,IAAI,IAAI,GAAG,qBAAqB,EAAE,CAAC;oBACjC,IAAI,GAAG,IAAI,CAAA;oBACX,MAAK;gBACP,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,CAAA;YAC5B,qEAAqE;YACrE,qEAAqE;YACrE,gBAAgB;YAChB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,MAAM,OAAO,GAAG,GAAS,EAAE;wBACzB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBACrC,OAAO,EAAE,CAAA;oBACX,CAAC,CAAA;oBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACxC,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;gBACrC,iDAAiD;gBACjD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,OAAM;YACR,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG;YAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAA;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,OAAM;YACR,CAAC;YACD,kEAAkE;YAClE,6DAA6D;YAC7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;YAC7C,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"plugin-tunnel.js","sourceRoot":"","sources":["../src/plugin-tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAA;AACvI,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AA6BnH;;;;;uEAKuE;AACvE,SAAS,cAAc,CAAC,KAA4B;IAClD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;QAChD,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;QAC/B,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE,KAAK;KACb,CAAA;AACH,CAAC;AAED;;;;;;;;;;iCAUiC;AACjC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAA+E,EAC/E,MAAgH,EAChH,YAA4C,EAC5C,YAAmC;IAEnC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1D,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;IACxF,IAAI,WAAW,CAAC,OAAO,KAAK,MAAM,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAA;IAC5D,CAAC;IACD,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,0EAA0E;IAC1E,yEAAyE;IACzE,wCAAwC;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IACrH,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAA;IACpF,0EAA0E;IAC1E,kEAAkE;IAClE,+DAA+D;IAC/D,uEAAuE;IACvE,IAAI,yBAAyB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;IACxD,CAAC;IACD,IAAI,MAAuB,CAAA;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,SAAiB,CAAA;IACrB,IAAI,YAAgC,CAAA;IACpC,IAAI,OAAO,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACrD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;QACjG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QACjF,SAAS,GAAG,OAAO,CAAA;IACrB,CAAC;SAAM,IAAI,OAAO,CAAC,EAAE,KAAK,WAAW,IAAI,YAAY,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9F,yEAAyE;QACzE,gEAAgE;QAChE,wEAAwE;QACxE,uEAAuE;QACvE,oEAAoE;QACpE,oEAAoE;QACpE,6BAA6B;QAC7B,SAAS,GAAG,EAAE,CAAA;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,UAAmB,CAAA;QACvB,IAAI,OAAO,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,YAAY,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;YACtF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;YACtD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;YACnF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;YACjF,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC5B,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,CAAC;QACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC1F,oEAAoE;QACpE,oEAAoE;QACpE,wBAAwB;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;QAC7E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QACrF,CAAC;QACD,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,GAA4B,EAAE,CAAA;QACzC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,CAAA;QACd,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;IACjG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACzJ,CAAC;AAED;;4BAE4B;AAC5B,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAA;AAEhD,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAA;AAE9C,qCAAqC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAyBvC;;qEAEqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAAA;AAE/C;;;;kDAIkD;AAClD,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,MAAM,GAAmB,EAAE,CAAA;IACjC,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QACrC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAK;QACrB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;QACpC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAA;QACtC,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAK;YACrB,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACxC,YAAY,GAAG,CAAC,CAAA;QAClB,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,IAAI,MAAM,GAAG,EAAE;gBAAE,MAAK;YACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACnD,IAAI,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;YAChG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;YACzB,YAAY,GAAG,EAAE,CAAA;QACnB,CAAC;QACD,IAAI,MAAM,GAAG,oBAAoB;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QACtF,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM;YAAE,MAAK;QACtD,MAAM,MAAM,GAAG,MAAM,GAAG,YAAY,CAAA;QACpC,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAA;QACrC,MAAM,GAAG,GAAG,SAAS,GAAG,MAAM,CAAA;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAA;QAC5D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACvE,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;QACrF,MAAM,GAAG,GAAG,CAAA;IACd,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AACtD,CAAC;AAED;;;;;iCAKiC;AACjC,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAE,IAAa,EAAE,GAAG,GAAG,IAAI;IAC3F,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,IAAI,IAAY,CAAA;IAChB,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAA;IACnD,CAAC;SAAM,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,CAAA;QACvB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACvB,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,CAAA;QACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED;;;;;;eAMe;AACf,SAAS,iBAAiB,CAAC,KAA4B,EAAE,KAAmB,EAAE,YAA4C;IACxH,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IAC7C,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;IACxD,CAAC;IACD,IAAI,IAAI,CAAA;IACR,IAAI,CAAC;QACH,IAAI,GAAG,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,eAAe,EAAE,EAAE,MAAM,CAAC,CAAA;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACtD,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;IACrF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC;AAED,oEAAoE;AACpE,MAAM,qBAAqB,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,0BAA0B,CAAU,CAAA;AAE3I,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;qCACqC;AACrC,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACvF,OAAO,KAAK,CAAA;AACd,CAAC;AAyCD;6BAC6B;AAC7B,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEzC;;eAEW;IACX,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAU,EAAE,MAAqE,EAAQ,EAAE;QAC3H,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM;YAAE,OAAM;QACtC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAClB,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1E,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAChD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,GAAmB,EAAE,KAA8B,EAAW,EAAE;QACjF,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa;YAAE,OAAO,KAAK,CAAA;QACpD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IACrE,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,GAAoB,EAAU,EAAE;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,CAAC,CAAA;IAED,iDAAiD;IACjD,MAAM,OAAO,GAAG,CAAC,GAAoB,EAAE,IAAY,EAAsB,EAAE;QACzE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC,CAAA;IAED;;;;;;oEAMgE;IAChE,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,YAA4C,EAA6E,EAAE;QACtK,MAAM,MAAM,GAAG,MAAM,CAAC,aAAc,CAAA;QACpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAA;QAC3E,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAA;YACpE,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,OAAO,OAAO,CAAA;YAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IACrD,CAAC,CAAA;IAED,OAAO;QACL,WAAW;YACT,OAAO,OAAO,CAAC,IAAI,CAAA;QACrB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG;YACjB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAC7B,uEAAuE;YACvE,qEAAqE;YACrE,IAAI,IAA6B,CAAA;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;gBACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;oBAC9B,IAAI,IAAK,KAAgB,CAAC,MAAM,CAAA;oBAChC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;wBACvB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;wBAC7C,OAAM;oBACR,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAA;gBAC/C,CAAC;gBACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAA;gBAClF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,MAAM,CAAA;YACf,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;YACpE,uEAAuE;YACvE,iEAAiE;YACjE,sEAAsE;YACtE,mDAAmD;YACnD,KAAK,MAAM,QAAQ,IAAI,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,EAAE,CAAC;gBAC9E,IAAI,UAAU,EAAE,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;oBACjG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAA;YACtG,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC9G,8DAA8D;YAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,IAAI,IAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAClC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;gBACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;oBAC1C,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;oBAC1C,OAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG;gBACb,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE;gBAC7C,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,IAAI,EAAE;gBACxD,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,IAAI,EAAE;gBACtD,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE;gBAC1C,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE;aAC3C,CAAA;YACD,IACE,MAAM,CAAC,UAAU,KAAK,EAAE,IAAI,MAAM,CAAC,aAAa,KAAK,EAAE,IAAI,MAAM,CAAC,YAAY,KAAK,EAAE;gBACrF,MAAM,CAAC,SAAS,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAC5D,CAAC;gBACD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YACD,sEAAsE;YACtE,oEAAoE;YACpE,oEAAoE;YACpE,kEAAkE;YAClE,sDAAsD;YACtD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;YACjF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC1D,OAAM;YACR,CAAC;YACD,iEAAiE;YACjE,qDAAqD;YACrD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;gBAC1G,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;gBACnC,OAAM;YACR,CAAC;YAED,mEAAmE;YACnE,oEAAoE;YACpE,2DAA2D;YAC3D,IAAI,MAAc,CAAA;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAA;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAA;gBAC5C,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAA;YAClC,IAAI,QAAgB,CAAA;YACpB,IAAI,CAAC;gBACH,oEAAoE;gBACpE,iEAAiE;gBACjE,sDAAsD;gBACtD,QAAQ;oBACN,MAAM,CAAC,QAAQ,KAAK,QAAQ;wBAC1B,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;wBAC1G,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YACD,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACxE,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,WAAW,CAAA;YACtG,MAAM,MAAM,GAAW;gBACrB,MAAM;gBACN,QAAQ;gBACR,GAAG;gBACH,WAAW,EAAE,CAAC;gBACd,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAClD,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE;oBAC1B,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;gBAClC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;aACxB,CAAA;YACD,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,UAAU;gBAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAEvB,qEAAqE;YACrE,oEAAoE;YACpE,sDAAsD;YACtD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,qCAAqC;gBACrD,eAAe,EAAE,wBAAwB;gBACzC,mBAAmB,EAAE,IAAI;aAC1B,CAAC,CAAA;YACF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;YAEnF,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAA;YACxC,MAAM,YAAY,GAAG;gBACnB,OAAO,MAAM,CAAC,SAAS,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,WAAW;gBACpE,mBAAmB,MAAM,CAAC,IAAI,EAAE;gBAChC,qBAAqB;gBACrB,oBAAoB;gBACpB,sBAAsB,KAAK,EAAE;gBAC7B,0BAA0B,SAAS,EAAE;gBACrC,GAAG,CAAC,UAAU,EAAE,CAAC,wBAAwB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,2BAA2B,gBAAgB,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtJ,GAAG,CAAC,UAAU,EAAE,CAAC,0BAA0B,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,6BAA6B,gBAAgB,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5J,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM;aACP,CAAA;YACD,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YACzC,oEAAoE;YACpE,kEAAkE;YAClE,qEAAqE;YACrE,oEAAoE;YACpE,8DAA8D;YAC9D,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;gBAClE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;gBAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,eAAe,CAAC,CAAA;oBACrC,OAAM;gBACR,CAAC;gBACD,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/D,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC;YAED,wEAAwE;YACxE,yEAAyE;YACzE,wEAAwE;YACxE,sEAAsE;YACtE,kEAAkE;YAClE,wDAAwD;YACxD,IAAI,gBAAgB,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9C,MAAM,cAAc,GAAG,GAAS,EAAE;gBAChC,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAA;oBACnE,gBAAgB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wBACrE,QAAQ,CAAC,KAAK,EAAE,CAAA;wBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;wBAC1C,OAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC,CAAA;YACD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACpC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAA;gBAC3D,cAAc,EAAE,CAAA;YAClB,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACxB,mEAAmE;gBACnE,8BAA8B;gBAC9B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACxE,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;oBAC1E,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACpC,CAAC;gBACD,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAA;YACzC,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACxB,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAA;YACxC,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,oDAAoD;gBACpD,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAA;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,CAAA;YAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,qEAAqE;gBACrE,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,CAAA;gBAC1C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;YAC1B,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC/B,+DAA+D;gBAC/D,6DAA6D;gBAC7D,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAA;gBAClD,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;gBAC3C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;YAC5D,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,qBAAqB,EAAE,CAAC;gBAC9E,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,IAAI,IAAI,GAAG,KAAK,CAAA;YAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBAC9B,IAAI,IAAK,KAAgB,CAAC,MAAM,CAAA;gBAChC,IAAI,IAAI,GAAG,qBAAqB,EAAE,CAAC;oBACjC,IAAI,GAAG,IAAI,CAAA;oBACX,MAAK;gBACP,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,IAAI,IAAI,EAAE,CAAC;gBACT,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,GAAG,CAAC,MAAM,EAAE,CAAA;gBACZ,OAAM;YACR,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,CAAA;YAC5B,oEAAoE;YACpE,iEAAiE;YACjE,kEAAkE;YAClE,mEAAmE;YACnE,yDAAyD;YACzD,IAAI,QAAQ,GAAW,KAAK,CAAA;YAC5B,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAA;gBACnE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;gBAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACtD,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;oBAC3C,OAAM;gBACR,CAAC;gBACD,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAA;YAC3B,CAAC;YACD,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,qEAAqE;YACrE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBAClC,MAAM,OAAO,GAAG,GAAS,EAAE;4BACzB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;4BACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;4BACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;4BACrC,OAAO,EAAE,CAAA;wBACX,CAAC,CAAA;wBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;wBACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBACxC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;gBACrC,iDAAiD;gBACjD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,OAAM;YACR,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG;YAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAA;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAA;gBAC7C,OAAM;YACR,CAAC;YACD,kEAAkE;YAClE,6DAA6D;YAC7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;YAC7C,CAAC;YACD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
* model spend (commit-message generation), documented as such; NO path
|
|
16
16
|
* fencing; `open.external` refuses for a remote session; `settings.*` and
|
|
17
17
|
* `/sidebar/bundle` stay local; the adapter registers as whole-machine
|
|
18
|
-
* data (consent per plugin, default off). PB-15
|
|
19
|
-
* `/sidebar/ws/sidechat`
|
|
18
|
+
* data (consent per plugin, default off). PB-15 left the 0.26.0 WebSocket
|
|
19
|
+
* `/sidebar/ws/sidechat` undeclared; PB-26b bridges it — its ids ride the
|
|
20
|
+
* post-handshake JSON frames (`{"op":"watch","threadIds":[...]}`), which
|
|
21
|
+
* the json-body upgrade gate locates, classifies and rewrites frame by
|
|
22
|
+
* frame on both halves.
|
|
20
23
|
*
|
|
21
24
|
* The `cwd` handling is the one subtle part: better-sidebar resolves a
|
|
22
25
|
* request's working directory as the session's own `header.cwd` first and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dsh-better-sidebar/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dsh-better-sidebar/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAahD,eAAO,MAAM,uBAAuB,EAAE,aAwLrC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileSessionInfo.d.ts","sourceRoot":"","sources":["../../../src/client/MobileSessionInfo.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAUjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAG3D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAgCjC,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAC9B,YAAY,CAAC,uCAAuC,CAAC,GACrD,WAAW,CAAC,OAAO,EAAE,CAAC,GACtB;IACA,4CAA4C;IAC5C,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IACzD,mFAAmF;IACnF,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,iGAAiG;IACjG,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IAChF,sDAAsD;IACtD,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,6FAA6F;IAC7F,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB,uFAAuF;IACvF,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,IAAI,CAAA;IAC/C;;;;;;OAMG;IACH,MAAM,EAAE,WAAW,CAAA;CACpB,CAAA;
|
|
1
|
+
{"version":3,"file":"MobileSessionInfo.d.ts","sourceRoot":"","sources":["../../../src/client/MobileSessionInfo.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAUjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAG3D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAgCjC,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAC9B,YAAY,CAAC,uCAAuC,CAAC,GACrD,WAAW,CAAC,OAAO,EAAE,CAAC,GACtB;IACA,4CAA4C;IAC5C,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IACzD,mFAAmF;IACnF,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,iGAAiG;IACjG,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IAChF,sDAAsD;IACtD,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,6FAA6F;IAC7F,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB,uFAAuF;IACvF,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,IAAI,CAAA;IAC/C;;;;;;OAMG;IACH,MAAM,EAAE,WAAW,CAAA;CACpB,CAAA;AAqDH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,MAAM,EACN,CAAC,GACF,EAAE,sBAAsB,sCAghBxB"}
|
|
@@ -1,27 +1,39 @@
|
|
|
1
1
|
import type { ClientContext } from '../compat/types.ts';
|
|
2
|
+
export interface RemoteDropEntryCounts {
|
|
3
|
+
drop: number;
|
|
4
|
+
picker: number;
|
|
5
|
+
paste: number;
|
|
6
|
+
}
|
|
2
7
|
export interface RemoteDropDiagnostics {
|
|
3
|
-
/** The
|
|
8
|
+
/** The listeners are mounted and armed (capability check passed, effect
|
|
4
9
|
* not yet disposed). */
|
|
5
10
|
installed: boolean;
|
|
6
11
|
/** Why the capability check declined to install; `undefined` while
|
|
7
12
|
* installed (and after a dispose, which keeps the counters readable). */
|
|
8
13
|
notInstalledReason: string | undefined;
|
|
9
|
-
/**
|
|
10
|
-
* the
|
|
14
|
+
/** Intakes this guard stopped from reaching the host (both the blocked and
|
|
15
|
+
* the redirected kind) — the sum of the three entries below. */
|
|
11
16
|
intercepted: number;
|
|
12
|
-
/** Synthetic path-stripped drops actually dispatched. */
|
|
17
|
+
/** Synthetic path-stripped drops actually dispatched (= redirected sum). */
|
|
13
18
|
redispatched: number;
|
|
14
|
-
/**
|
|
15
|
-
* dispatched). */
|
|
19
|
+
/** Intakes stopped because they carried a folder (toast shown, nothing
|
|
20
|
+
* dispatched) (= blocked sum). */
|
|
16
21
|
blockedDirectories: number;
|
|
17
|
-
/**
|
|
22
|
+
/** Intakes judged not-ours and released untouched (= passthrough sum). */
|
|
18
23
|
passthrough: number;
|
|
19
24
|
/** Redispatches aborted because a re-wrap or a DataTransfer add threw —
|
|
20
25
|
* the original event was released instead (宁坏勿丢). */
|
|
21
26
|
rewrapFailed: number;
|
|
27
|
+
/** The same four counters split by entry (AU-2); the scalars above are
|
|
28
|
+
* their sums, so existing readers keep working unchanged. */
|
|
29
|
+
interceptedBy: RemoteDropEntryCounts;
|
|
30
|
+
redirectedBy: RemoteDropEntryCounts;
|
|
31
|
+
blockedBy: RemoteDropEntryCounts;
|
|
32
|
+
passthroughBy: RemoteDropEntryCounts;
|
|
22
33
|
}
|
|
23
34
|
/** A snapshot for the diagnostics carriers (settings page). Copying keeps
|
|
24
|
-
* callers from holding a live reference into a later mount's state
|
|
35
|
+
* callers from holding a live reference into a later mount's state — the
|
|
36
|
+
* per-entry objects are copied too, or a caller would keep counting. */
|
|
25
37
|
export declare function remoteDropDiagnostics(): RemoteDropDiagnostics;
|
|
26
38
|
export declare function mountRemoteDropGuard(ctx: ClientContext): void;
|
|
27
39
|
//# sourceMappingURL=remote-drop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-drop.d.ts","sourceRoot":"","sources":["../../../../src/client/effects/remote-drop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"remote-drop.d.ts","sourceRoot":"","sources":["../../../../src/client/effects/remote-drop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAyDvD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC;4BACwB;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB;6EACyE;IACzE,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC;oEACgE;IAChE,WAAW,EAAE,MAAM,CAAA;IACnB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAA;IACpB;sCACkC;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB;yDACqD;IACrD,YAAY,EAAE,MAAM,CAAA;IACpB;iEAC6D;IAC7D,aAAa,EAAE,qBAAqB,CAAA;IACpC,YAAY,EAAE,qBAAqB,CAAA;IACnC,SAAS,EAAE,qBAAqB,CAAA;IAChC,aAAa,EAAE,qBAAqB,CAAA;CACrC;AAsBD;;wEAEwE;AACxE,wBAAgB,qBAAqB,IAAI,qBAAqB,CAQ7D;AA8GD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CA2R7D"}
|
|
@@ -34,6 +34,8 @@ export declare const zh: {
|
|
|
34
34
|
readonly activityOpen: "查看子代理与后台任务";
|
|
35
35
|
readonly infoStatTurns: "轮次";
|
|
36
36
|
readonly infoStatSteps: "步骤";
|
|
37
|
+
readonly infoStatTurnsSteps: "轮次 / 步数";
|
|
38
|
+
readonly infoStatSpeed: "输出速度";
|
|
37
39
|
readonly infoStatTtft: "首字延迟";
|
|
38
40
|
readonly infoStatLlm: "模型耗时";
|
|
39
41
|
readonly infoStatTool: "工具耗时";
|
|
@@ -241,13 +243,20 @@ export declare const zh: {
|
|
|
241
243
|
readonly 'settings.client.diagRecentFailures': "最近的远程调用失败";
|
|
242
244
|
readonly 'settings.client.diagCompatGroups': "指纹有差异的组:{groups}";
|
|
243
245
|
readonly 'settings.client.diagCompatCalls': "最近的不兼容调用";
|
|
244
|
-
readonly 'settings.client.diagRemoteDrop': "
|
|
246
|
+
readonly 'settings.client.diagRemoteDrop': "附件入口守卫";
|
|
245
247
|
readonly 'settings.client.diagRemoteDropOk': "已安装 · 拦截 {intercepted} · 重派发 {redispatched} · 文件夹 {blocked} · 放行 {passthrough} · 重包失败 {failed}";
|
|
248
|
+
readonly 'settings.client.diagRemoteDropEntries': "分入口 · 拦截 拖拽 {dropI} / 回形针 {pickerI} / 粘贴 {pasteI} · 放行 拖拽 {dropP} / 回形针 {pickerP} / 粘贴 {pasteP}";
|
|
246
249
|
readonly 'settings.client.diagRemoteDropOff': "未安装({reason})";
|
|
247
250
|
readonly 'settings.client.diagUploadRedirect': "上传改道";
|
|
248
251
|
readonly 'settings.client.diagUploadRedirectOk': "已安装 · 上传已接管";
|
|
249
252
|
readonly 'settings.client.diagUploadRedirectRefused': "拒装:{reason}";
|
|
250
253
|
readonly 'settings.client.diagUploadRedirectPending': "服务注入未触发 · connection {connection} · fileUploads {fileUploads}";
|
|
254
|
+
readonly 'settings.debug.title': "诊断信息";
|
|
255
|
+
readonly 'settings.debug.export': "导出诊断信息";
|
|
256
|
+
readonly 'settings.debug.exporting': "正在生成…";
|
|
257
|
+
readonly 'settings.debug.hint': "下载一份脱敏后的诊断文件(版本、配置形态、连接诊断、插件日志)。令牌与密钥、对话内容、附件和完整文件路径一律不包含,服务器地址只保留类型。建议从机与主服务器各导一份,可直接附到 GitHub issue。";
|
|
258
|
+
readonly 'settings.debug.done': "诊断文件已下载";
|
|
259
|
+
readonly 'settings.debug.fail': "导出失败:无法生成诊断报告";
|
|
251
260
|
readonly 'settings.bridge.title': "插件桥";
|
|
252
261
|
readonly 'settings.bridge.empty': "暂无插件登记插件桥";
|
|
253
262
|
readonly 'settings.bridge.loading': "正在读取插件桥登记…";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,eAAO,MAAM,EAAE,cAAc,CAAA;AAE7B,mEAAmE;AACnE,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,eAAO,MAAM,EAAE,cAAc,CAAA;AAE7B,mEAAmE;AACnE,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAygBL,CAAA;AAEV,wEAAwE;AACxE,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAqgB3C,CAAA;AAED,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSection.d.ts","sourceRoot":"","sources":["../../../../src/client/settings/SettingsSection.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"SettingsSection.d.ts","sourceRoot":"","sources":["../../../../src/client/settings/SettingsSection.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AA2BjF,OAAO,KAAK,EAUV,qBAAqB,EACtB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAGlC,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAE9E,MAAM,WAAW,oBAAqB,SAAQ,YAAY,CAAC,oBAAoB,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACtG,sDAAsD;IACtD,MAAM,EAAE,qBAAqB,CAAA;IAC7B;mDAC+C;IAC/C,MAAM,EAAE,WAAW,CAAA;CACpB;AAiGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAW1D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CONTENT_CSS = "/* ---------- chat markdown content (< 768px) ---------- */\n\n@media (max-width: 767px) {\n /* Inline code: upstream renders it display:inline-flex \u2014 an atomic inline\n box that can never wrap across lines, so one long code span walks off\n the right edge of the screen. Plain inline keeps the background pill\n per line fragment and lets long tokens break anywhere. Deliberately\n unscoped (any :not(pre) > code, not just the _markdown_ module):\n inline code also renders outside that container (user bubbles,\n reasoning rows), and on a phone there is no width at which an\n unwrappable inline box is right. !important beats the upstream\n display:inline-flex on specificity ties. */\n :not(pre) > code {\n display: inline !important;\n overflow-wrap: anywhere;\n /* iOS WebKit: overflow-wrap alone still failed to break long tokens in\n inline code on a real iPhone (screenshot-verified 2026-08-18, li >\n code path case) while desktop Chromium broke them fine. break-all is\n the everywhere-supported hammer; acceptable for code pills. */\n word-break: break-all;\n }\n /* Belt-and-suspenders for engines that compute soft-wrap opportunities\n from the block container rather than the inline itself (historical\n WebKit behavior): inherit anywhere through the whole transcript so the\n block side agrees. Prose is untouched until something would overflow;\n the table is already pinned wide by min-width: max-content below. */\n [data-chat-flow],\n [class*=\"_markdown_\"] {\n overflow-wrap: anywhere;\n }\n\n /* Transcript density (2026-08-20): the desktop prose rhythm is 28px of\n leading on 15px text \u2014 a 1.87 ratio that reads generously on a wide\n column but wastes a phone screen, where the same paragraph is three\n times as many lines. Unitless 1.65 so nested blocks (code, quotes,\n lists) recompute from their OWN font-size instead of inheriting a fixed\n 28px that is far too loose for 12-13px chrome text. 1.65 is the floor I\n am willing to go to for mixed CJK/Latin: the glyphs are full-height with\n no descender relief, so tighter starts to look stacked. Phone only \u2014\n the desktop column keeps the official rhythm. */\n [class*=\"_markdown_\"] {\n line-height: 1.65;\n }\n /* Paragraph rhythm. Each paragraph is its own markdown block and the\n separation comes from the flex container's row-gap, not from margins \u2014\n at the stock 16px the paragraph baseline step was 40.75px against a\n 24.75px line step, i.e. 1.65x, which is what reads as airy. 12px brings\n the step to ~36.75px: still clearly more than one line so paragraphs\n never run together, but noticeably denser. Scoped by :has() to\n containers that actually hold prose blocks, so tool cards and other\n flex bodies with the same hashed suffix keep their own spacing. */\n [data-phase] [class$=\"_body\"]:has(> [class*=\"_markdown_\"]) {\n row-gap: 12px !important;\n }\n\n /* Markdown tables: the official _tableScroll_ wrapper is already a\n horizontal scroll viewport around a width:max-content table, but its\n cells are capped at min(30vw, 320px) \u2014 barely 120px on a phone, which\n crushes every column into a vertical word-stack. Let columns size to\n their content instead and read the overflow by scrolling the wrapper.\n 480px (not a vw cap \u2014 85vw was ~320px on a 375px phone and still\n wrapped mid-length cells) keeps typical cells on one line; only truly\n prose-heavy cells wrap, instead of dragging the table kilometers\n wide. */\n [class*=\"_tableScroll_\"] th,\n [class*=\"_tableScroll_\"] td {\n max-width: 480px !important;\n }\n\n /* iOS WebKit fallback: upstream's own table { width: max-content } is what\n keeps the table at its natural width inside the scroll wrapper, but\n WebKit's max-content support on table boxes is incomplete \u2014 on a real\n iPhone the table fell back to shrink-to-fit and every column got\n crushed to its min-width (the \"ra/nk\" vertical-word-stack screenshot,\n 2026-08-18). Redeclare the natural-width intent with both width and\n min-width so whichever keyword the engine honors wins; the wrapper\n already scrolls the overflow. */\n [class*=\"_tableScroll_\"] table {\n width: max-content !important;\n min-width: max-content !important;\n max-width: none !important;\n }\n\n /* Turn-tail metadata (2026-08-18
|
|
1
|
+
export declare const CONTENT_CSS = "/* ---------- chat markdown content (< 768px) ---------- */\n\n@media (max-width: 767px) {\n /* Inline code: upstream renders it display:inline-flex \u2014 an atomic inline\n box that can never wrap across lines, so one long code span walks off\n the right edge of the screen. Plain inline keeps the background pill\n per line fragment and lets long tokens break anywhere. Deliberately\n unscoped (any :not(pre) > code, not just the _markdown_ module):\n inline code also renders outside that container (user bubbles,\n reasoning rows), and on a phone there is no width at which an\n unwrappable inline box is right. !important beats the upstream\n display:inline-flex on specificity ties. */\n :not(pre) > code {\n display: inline !important;\n overflow-wrap: anywhere;\n /* iOS WebKit: overflow-wrap alone still failed to break long tokens in\n inline code on a real iPhone (screenshot-verified 2026-08-18, li >\n code path case) while desktop Chromium broke them fine. break-all is\n the everywhere-supported hammer; acceptable for code pills. */\n word-break: break-all;\n }\n /* Belt-and-suspenders for engines that compute soft-wrap opportunities\n from the block container rather than the inline itself (historical\n WebKit behavior): inherit anywhere through the whole transcript so the\n block side agrees. Prose is untouched until something would overflow;\n the table is already pinned wide by min-width: max-content below. */\n [data-chat-flow],\n [class*=\"_markdown_\"] {\n overflow-wrap: anywhere;\n }\n\n /* Transcript density (2026-08-20): the desktop prose rhythm is 28px of\n leading on 15px text \u2014 a 1.87 ratio that reads generously on a wide\n column but wastes a phone screen, where the same paragraph is three\n times as many lines. Unitless 1.65 so nested blocks (code, quotes,\n lists) recompute from their OWN font-size instead of inheriting a fixed\n 28px that is far too loose for 12-13px chrome text. 1.65 is the floor I\n am willing to go to for mixed CJK/Latin: the glyphs are full-height with\n no descender relief, so tighter starts to look stacked. Phone only \u2014\n the desktop column keeps the official rhythm. */\n [class*=\"_markdown_\"] {\n line-height: 1.65;\n }\n /* Paragraph rhythm. Each paragraph is its own markdown block and the\n separation comes from the flex container's row-gap, not from margins \u2014\n at the stock 16px the paragraph baseline step was 40.75px against a\n 24.75px line step, i.e. 1.65x, which is what reads as airy. 12px brings\n the step to ~36.75px: still clearly more than one line so paragraphs\n never run together, but noticeably denser. Scoped by :has() to\n containers that actually hold prose blocks, so tool cards and other\n flex bodies with the same hashed suffix keep their own spacing. */\n [data-phase] [class$=\"_body\"]:has(> [class*=\"_markdown_\"]) {\n row-gap: 12px !important;\n }\n\n /* Markdown tables: the official _tableScroll_ wrapper is already a\n horizontal scroll viewport around a width:max-content table, but its\n cells are capped at min(30vw, 320px) \u2014 barely 120px on a phone, which\n crushes every column into a vertical word-stack. Let columns size to\n their content instead and read the overflow by scrolling the wrapper.\n 480px (not a vw cap \u2014 85vw was ~320px on a 375px phone and still\n wrapped mid-length cells) keeps typical cells on one line; only truly\n prose-heavy cells wrap, instead of dragging the table kilometers\n wide. */\n [class*=\"_tableScroll_\"] th,\n [class*=\"_tableScroll_\"] td {\n max-width: 480px !important;\n }\n\n /* iOS WebKit fallback: upstream's own table { width: max-content } is what\n keeps the table at its natural width inside the scroll wrapper, but\n WebKit's max-content support on table boxes is incomplete \u2014 on a real\n iPhone the table fell back to shrink-to-fit and every column got\n crushed to its min-width (the \"ra/nk\" vertical-word-stack screenshot,\n 2026-08-18). Redeclare the natural-width intent with both width and\n min-width so whichever keyword the engine honors wins; the wrapper\n already scrolls the overflow. */\n [class*=\"_tableScroll_\"] table {\n width: max-content !important;\n min-width: max-content !important;\n max-width: none !important;\n }\n\n /* Turn-tail metadata (2026-08-18; reshaped 2026-10-30 for DSH 0.2.x): the\n tail's 24h clock is desktop-hover-revealed (official\n [data-time-hover-root] gate holds it at opacity 0 until :hover /\n :focus-within) \u2014 a phone never hovers, so it was simply invisible; and\n the row is a fixed-height nowrap + overflow:hidden flex line (plus this\n plugin's own clamp in layout.css.ts), which clipped it.\n\n DSH 0.2.x (MessageIconActions, dsh-client-ui-chat) groups the usage\n button (TurnUsagePanel) and the clock (_timeEnd) inside ONE inline-flex\n _endInfo (min-width: 0; align-items: center; gap: 8px; margin-left: 8px)\n that never wraps internally. The 0.1.x-era rule here gave _timeEnd\n flex-basis: 100% + white-space: normal \u2014 inside _endInfo that no longer\n reads as \"own full-width line\", it reads as \"shrink to nothing and\n break\", and with the transcript-wide overflow-wrap: anywhere above,\n \"18:06\" rendered as two lines. On phones now: always visible; the row\n may grow in height and wrap; _endInfo drops to the next line as one\n unit when icons + usage + clock do not fit; the clock itself never\n shrinks or breaks. !important + the extra [class$=\"_actions\"] hop\n out-specifies both upstream and layout.css.ts. */\n /* Pin the tail row's width chain before allowing wrap: with wrap enabled\n the row's intrinsic (shrink-to-fit) width collapses to its widest\n single icon, taking the whole tail down to ~16px. */\n [data-chat-flow-kind=\"turn-tail\"] [class$=\"_root\"],\n [data-chat-flow-kind=\"turn-tail\"] [class$=\"_actions\"] {\n width: 100%;\n }\n /* height: auto releases the upstream fixed height: calc(28px + \u2026);\n overflow: visible beats layout.css.ts's overflow: hidden (same\n specificity \u2014 this file is concatenated last, so it wins the tie). A\n wrapped second line must not be cut off vertically; min-height keeps\n the one-line case at the upstream height so nothing shifts when it\n fits. */\n [data-chat-flow-kind=\"turn-tail\"] [class$=\"_actions\"] {\n flex-wrap: wrap;\n row-gap: 2px;\n height: auto !important;\n min-height: 28px;\n overflow: visible !important;\n }\n /* _endInfo moves as a whole: flex: none so the usage + clock group is\n never asked to shrink \u2014 when the row is too narrow the entire group\n wraps to the next line instead of compressing the clock inside it.\n max-width keeps an unusually long usage label inside the column. */\n [data-chat-flow-kind=\"turn-tail\"] [class$=\"_actions\"] [class$=\"_endInfo\"] {\n flex: none;\n max-width: 100%;\n }\n /* Wide companion to the rule below: mirrors the upstream hover-gate\n selector shape directly, with no assumptions about the tail's DOM\n structure, so the stats can't stay invisible even if the phone's tail\n renders differently than desktop. */\n [data-time-hover-root] [class$=\"_timeEnd\"],\n [data-time-hover-root] [class$=\"_timeStart\"] {\n opacity: 1 !important;\n transition: none !important;\n }\n /* overflow-wrap / word-break: normal undo the [data-chat-flow]\n overflow-wrap: anywhere inherited from the top of this block \u2014 that is\n the rule that let \"18:06\" break between digits once its box was\n squeezed. */\n [data-chat-flow-kind=\"turn-tail\"] [class$=\"_actions\"] [class$=\"_timeEnd\"] {\n opacity: 1 !important;\n flex: none !important;\n white-space: nowrap !important;\n overflow-wrap: normal !important;\n word-break: normal !important;\n font-size: 12px;\n line-height: 18px;\n }\n}\n";
|
|
2
2
|
//# sourceMappingURL=content.css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.css.d.ts","sourceRoot":"","sources":["../../../../src/client/styles/content.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"content.css.d.ts","sourceRoot":"","sources":["../../../../src/client/styles/content.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,q+PAyJvB,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const LAYOUT_CSS = "/* ---------- mobile-only layout ---------- */\n\n@media (max-width: 1023px) {\n /* --- Phone chrome ---\n The system status bar stays visible (no fullscreen). Two adjustments\n make it behave:\n - touch-action: manipulation kills double-tap-to-zoom (and the 300ms\n tap delay) while keeping pan and pinch zoom; the client also\n suppresses legacy-iOS gesturestart as a fallback.\n - With the client's viewport-fit=cover, env(safe-area-inset-top) is the\n status bar / notch height; the rules below push the app content below\n it so the status bar never covers anything. Off notched phones (or in\n a normal browser tab where the layout viewport already sits below the\n status bar) the inset is 0 and nothing shifts. */\n html,\n body {\n touch-action: manipulation !important;\n }\n\n /* AppFrame: the drawer takes the sidebar column out of grid flow, so the\n remaining in-flow items (center, details) land in tracks 1..2: give the\n center every pixel and keep the details track at zero. The top padding\n clears the status bar / notch for every in-flow surface (session header,\n messages, composer); the absolutely-positioned drawer is unaffected (its\n containing block is the frame's padding box, i.e. still the frame top). */\n /* box-sizing: border-box is load-bearing (S2.1, 2026-08-17). The official\n frame carries height: 100% with the default content-box, so the\n safe-area padding ADDED 54px to its height instead of taking 54px out\n of the content area: the frame grew past the viewport, the document\n became scrollable by exactly the inset, and the very first scroll put\n the header right back under the notch \u2014 measured with\n ?mobile-nav-inset=54 (frame 898px tall inside an 844px root, html at\n y=-54). Invisible on every desktop browser because the inset is 0\n there, which is how it shipped. */\n [data-mobile-nav=\"frame\"] {\n position: relative !important;\n box-sizing: border-box !important;\n grid-template-columns: minmax(0, 1fr) 0 0 !important;\n padding-top: var(--mnav-sat) !important;\n }\n\n /* The sidebar column (first grid child) becomes a left drawer. The drawer\n hugs the sidebar content exactly (the wide sidebar carries an inline\n width, ~280px): a fixed 92vw box would leave a white strip where the\n container background shows beside the content.\n Closed state: translateX(-110%) \u2014 more than -100% of the max-content\n width \u2014 guarantees the whole drawer (and its shadow, had it one) leaves\n the viewport. A mere -100% leaves a sliver on screen; -105% (as used\n before) left 14px of the drawer plus a long 32px-blur shadow gradient\n visible along the left edge of the main UI. No box-shadow at all: the\n dimmed backdrop already separates drawer from content. */\n [data-mobile-nav=\"frame\"] > :first-child {\n position: absolute !important;\n inset: 0 auto 0 0 !important;\n width: max-content !important;\n max-width: 92vw !important;\n z-index: 40 !important;\n transform: translateX(-110%);\n transition: transform .28s var(--ds-ease-in-out, ease-in-out);\n background: var(--dsw-alias-bg-base, #ffffff);\n /* Keep the drawer's own content below the status bar / notch: the drawer\n spans the full frame height (its absolute containing block is the\n frame's padding box, so the frame's own safe-area padding does NOT\n reach it). The drawer background paints the status-bar strip, which\n the client's theme-color meta matches, so the strip reads seamless. */\n padding-top: var(--mnav-sat) !important;\n /* Kill the official sidebarCol right border: with the backdrop the edge\n reads cleanly, and the settings dialog (width:100% of this box) stays\n pixel-flush with the drawer. */\n border-right: none !important;\n }\n\n /* The official right sidebar (DSH 0.1.5+) in its full-screen mode \u2014 the\n one the phone's header sidebar button opens (sidebar-panels.ts). The\n host promotes the panel to position:fixed; inset:0 there, so exactly\n like the drawer above it escapes the frame's safe-area padding and its\n tab strip + chrome buttons landed under the status bar (real-device\n report, 2026-09-21). Both insets: the status bar / notch on top, the\n home indicator at the bottom. Padding, no box-sizing change: fixed\n with both top and bottom set resolves its used height from the\n containing block minus padding (CSS 2.1 10.6.4), so the content box\n shrinks by itself \u2014 the same reasoning the legacy better-sidebar panel\n rule in compat.css.ts spells out. `fullscreen` is the host's own\n attribute value (`push` while docked, dsh-client-ui-sidebar-right), so\n the docked panel is untouched; a manual full-screen on desktop is\n outside this media block anyway. Verify with ?mobile-nav-inset=54,34 \u2014\n env() is 0 in every desktop browser. */\n [data-sidebar-right-panel=\"fullscreen\"] {\n padding-top: var(--mnav-sat) !important;\n padding-bottom: var(--mnav-sab) !important;\n }\n\n /* Expanded state (frame without data-sidebar-collapsed) slides the drawer in.\n The open state must be transform:none \u2014 NOT translateX(0): an identity\n transform still makes the drawer the containing block for fixed-position\n descendants (the settings dialog's .VOzbGW_overlay is portaled into the\n sidebar DOM). With the identity transform the wide settings sheet\n (100vw-16) overflows the 280px drawer, the dialog's focus scrolls the\n overflow:hidden drawer to scrollLeft=102, and every static child (plus the\n fixed overlay) shifts 102px off-screen. With transform:none the overlay is\n viewport-anchored: it dims the full screen and the sheet sits at left:8. */\n [data-mobile-nav=\"frame\"]:not([data-sidebar-collapsed]) > :first-child {\n transform: none !important;\n }\n\n /* Drag handles are useless on touch and would float over the drawer. */\n [data-side=\"sidebar\"],\n [data-side=\"details\"] {\n display: none !important;\n }\n\n /* --- Conversation text on mobile ---\n The official message flow keeps desktop's 32px side gutters and 16px\n type. On a phone: shrink the type a notch and widen the lines by\n trimming the gutters (the sidebar drawer list keeps its size). The\n flow's scroll container is the only _scroll element holding markdown\n <p> paragraphs \u2014 the composer's own scroll (textarea) is excluded\n via :has(p). */\n /* The official main scroll body reserves scrollbar-gutter for desktop\n scrollbars (8px), which shoves every column off-center on a phone.\n Classic desktop scrollbars (Edge/Chrome) also occupy ~8-17px in a\n phone-sized viewport, shifting the column further. Mobile scrolling\n is touch/wheel, so remove the scrollbar entirely on phones: the\n column is then exactly centered in every browser. */\n [data-phase] [class$=\"_scrollBody\"] {\n scrollbar-gutter: auto !important;\n scrollbar-width: none !important;\n }\n [data-phase] [class$=\"_scrollBody\"]::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n /* Message action rows (copy / run-time badges) can overflow the right\n edge on narrow screens \u2014 keep them inside the message width. */\n [data-phase] [class$=\"_actions\"] {\n overflow: hidden !important;\n }\n [data-phase] [class$=\"_actions\"] [class$=\"_timeEnd\"] {\n flex: 0 1 auto !important;\n min-width: 0 !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n }\n\n [data-phase] [class$=\"_scroll\"]:has(p) {\n padding-left: 20px !important;\n padding-right: 20px !important;\n font-size: 15px !important;\n }\n /* The official markdown styles set an explicit 16px on paragraphs and\n list items, so the container's inherited 15px is not enough. User\n messages render their text in a div whose class carries _text_\n (16px too) \u2014 cover it as well. */\n [data-phase] [class$=\"_scroll\"]:has(p) p,\n [data-phase] [class$=\"_scroll\"]:has(p) li,\n [data-phase] [class$=\"_scroll\"]:has(p) [class*=\"_text_\"] {\n font-size: 15px !important;\n }\n\n /* Markdown tables: the official table uses width:max-content, so on a phone\n it hugs the content and leaves dead space beside/inside the table. Force\n the table to fill the message column and let the table wrapper handle\n overflow if a cell is genuinely too wide. */\n [data-phase] table {\n width: 100% !important;\n max-width: 100% !important;\n }\n [data-phase] th,\n [data-phase] td {\n max-width: none !important;\n min-width: 0 !important;\n }\n\n /* User bubbles: the official stack is capped at min(525px, 82%), which on a\n phone leaves a large blank strip on the left and pushes the bubble high.\n On mobile let the user message fill the same full width as assistant\n messages (the bubble background then spans the whole message column). */\n [data-phase] [class$=\"_userStack\"],\n [data-phase] [class$=\"_userStack\"] [class$=\"_bubble\"] {\n box-sizing: border-box !important;\n width: fit-content !important;\n max-width: 100% !important;\n }\n\n /* --- Composer bottom row on mobile ---\n The official row gives the model pill (trailing) flex:0 0 auto, which\n squeezes the agent-permission pill (modes) down to 15px: the pill's\n chevron then overflows on top of the model name. Let the permission\n pill keep its natural width and let the model pill shrink instead.\n Anchored by the composer card (:has(textarea)): row = the _row class\n containing a _trailing group, tools = its first child, permission pill\n = its 2nd child, model pill = the _trailing group.\n NOTE: do NOT anchor these by the card's :last-child \u2014 a client effect\n moves the git-graph branch chip INTO the card, which becomes the card's\n new last child and silently disables every :last-child rule (the model\n pill then falls back to the official fixed layout and long model IDs\n overflow instead of ellipsizing). Structural anchors only. */\n /* The official row pads every group with 12px gaps, which on a phone eats\n width the model pill needs for the full model ID. Tighten the row to 8px\n gaps (the modes pill keeps its natural width) so the model name gets\n every spare pixel. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_row\"]:has([class$=\"_trailing\"]) {\n gap: 8px !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_row\"]:has([class$=\"_trailing\"]) > :first-child {\n gap: 8px !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_row\"]:has([class$=\"_trailing\"]) > :first-child > :nth-child(2) {\n flex: 0 0 auto !important;\n gap: 8px !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_trailing\"] {\n flex: 1 1 auto !important;\n gap: 8px !important;\n min-width: 0 !important;\n }\n /* Let the model selector take the free space in the trailing group so the\n model name is not squeezed/truncated; the context meter stays fixed. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"][aria-haspopup=\"menu\"]) {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"][aria-haspopup=\"menu\"]) > [class$=\"_trigger\"] {\n width: 100% !important;\n max-width: 100% !important;\n }\n /* The model label must absorb the trigger's free width: officially it is a\n fixed-content flex item, so the spare width of a grown pill sits unused\n between the chevron and the pill edge. Let the label grow and shrink:\n the full model ID shows whenever the row can fit it, and the ellipsis\n lands exactly at the available width otherwise. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"][aria-haspopup=\"menu\"]) > [class$=\"_trigger\"] > [class$=\"_triggerLabel\"] {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"]:not([aria-haspopup=\"menu\"])) {\n flex: 0 0 auto !important;\n }\n\n /* Model switcher menu: the official dropdown is right-aligned to the\n trigger (right:0). The model pill sits near the center of the composer,\n so on a phone the 240px menu overflows the left edge and looks off-center.\n Center the menu on the trigger instead. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"]) > [class$=\"_menu\"] {\n left: 50% !important;\n right: auto !important;\n transform: translateX(-50%) !important;\n }\n\n /* --- Session header on mobile ---\n Layout goal: [toggle] [session title] [mode badge] in a row, with the\n Session log capsule removed from the header (relocated to the drawer\n footer). Stable structural hooks only:\n [data-phase] header the session header element\n header > :first-child titleRow (titleCluster + utilities)\n header > :first-child > :last-child headerUtilities (Session log seat) */\n [data-phase] header {\n padding-right: 12px !important;\n }\n /* Give the title row a lane clear of the absolutely-placed toggle, then\n balance the header: with header padding-right 12px, a 20px left\n padding puts the title's geometric center exactly on the viewport\n center (measured 195/195 at 390px). */\n [data-phase] header > :first-child {\n padding-left: 20px !important;\n }\n /* The directory toggle sits at the far left of the header (the header\n is position:relative; the data-slot wrappers are display:contents). */\n [data-mobile-nav=\"toggle\"] {\n position: absolute !important;\n left: 8px !important;\n top: 12px !important;\n z-index: 2 !important;\n }\n /* The Files action stays in-flow inside headerActions. On mobile headerActions\n does not expand to fill the row: it is pushed to the right edge and keeps\n its content size, so [mode] [subagent/jobs] [files] sit close together\n with the normal 8px gaps \u2014 compact, no artificial blank columns. Explicit\n flex order keeps Files rightmost regardless of DOM order. */\n [data-mobile-nav=\"files\"] {\n position: static !important;\n left: auto !important;\n right: auto !important;\n top: auto !important;\n z-index: auto !important;\n }\n [data-phase] header [class$=\"_headerActions\"] {\n flex: 0 1 auto !important;\n min-width: 0 !important;\n margin-left: auto !important;\n justify-content: flex-end !important;\n }\n /* The session title/crumb must yield space on mobile so the mode label and\n subagent cluster are not squeezed to a single letter. Cap it at ~24vw and\n let it truncate with ellipsis. */\n [data-phase] header [class$=\"_crumbs\"] {\n flex: 0 1 auto !important;\n min-width: 0 !important;\n max-width: 24vw !important;\n }\n /* Mode label (AgentPresetLabel): the official pill uses inline-flex, whose\n direct text node is only clipped \u2014 no ellipsis. Convert the pill to a\n block container, keep its icon absolutely positioned on the left, and let\n it size naturally up to 42vw so the mode name stays readable while the\n subagent/Files cluster still fits on a phone. */\n [data-phase] header [class$=\"_label\"]:has(> svg) {\n order: 1 !important;\n flex: 0 1 auto !important;\n min-width: 0 !important;\n max-width: 42vw !important;\n display: block !important;\n position: relative !important;\n box-sizing: border-box !important;\n padding-left: 18px !important;\n padding-right: 2px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n }\n [data-phase] header [class$=\"_label\"]:has(> svg) > svg {\n position: absolute !important;\n left: 0 !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n }\n /* Subagent/jobs helpers: keep their triggers on one line and never let the\n row grow artificial empty space. */\n [data-phase] header [class$=\"_root\"]:has(> button[class$=\"_trigger\"]) {\n order: 2 !important;\n flex: 0 0 auto !important;\n min-width: max-content !important;\n max-width: none !important;\n white-space: nowrap !important;\n /* On mobile the popover is anchored to the header (viewport-width\n containing block) instead of the trigger, so a small left inset keeps it\n fully on screen and never clips the tree's status dots. */\n position: static !important;\n }\n [data-phase] header [class$=\"_root\"]:has(> button[class$=\"_trigger\"]) > button,\n [data-phase] header [class$=\"_root\"]:has(> button[class$=\"_trigger\"]) > button * {\n white-space: nowrap !important;\n }\n [data-phase] header [data-mobile-nav=\"files\"] {\n order: 3 !important;\n flex: 0 0 auto !important;\n }\n /* Session log download: gone from the header row on mobile (the utilities\n seat holds only the session-log-export capsule). */\n [data-phase] header > :first-child > :last-child {\n display: none !important;\n }\n\n /* --- Header popovers on mobile (dsh-client-ui-jobs / dsh-client-ui-subagent) ---\n The official entries sit in the session header actions. Their popovers\n are anchored to the trigger's LEFT edge (left: 0), so from a right-edge\n trigger the 336px panel spills past the viewport. Re-anchor them to the\n trigger's right edge instead. The popover classes are hashed CSS-module\n names, so target them by the stable _menu suffix inside the header. */\n /* Header popovers on mobile: anchor to the left edge with a small inset and\n clamp the width, instead of right-aligning to a trigger near the right\n edge (which pushed the panel left off-screen and clipped the status dots).\n Also cap the height so the panel does not run into the composer/task bar. */\n [data-phase] header [class$=\"_menu\"] {\n left: 8px !important;\n right: auto !important;\n width: min(336px, calc(100vw - 16px)) !important;\n max-width: none !important;\n max-height: min(420px, calc(100dvh - 120px)) !important;\n }\n /* --- Settings dialog on mobile ---\n Desktop: 800px two-column flex (188px nav + content). Mobile: a\n near-full-width sheet \u2014 nav tabs wrap into rows on top, option rows\n stay horizontal (title+description left, control right). Structural\n selectors are scoped to the unique aria-modal dialog; every\n settings-specific rule is gated with\n :has(> :first-child > :last-child > button) \u2014 the settings nav tab\n list holds <button> tabs, so the transient export dialog (the same\n primitives Modal, header(title+close)+description+body) keeps its\n official centered card layout. Requires :has() support\n (Chromium 105+, 2022).\n\n The directory picker (dsh-client-ui-directory-picker-browse) must be\n excluded too: its footer bar holds <button> children AND its breadcrumb\n trail (role=\"navigation\") \u2014 which the role gate relies on to exclude\n it \u2014 is REPLACED by the path input in edit mode (pencil button), so\n without the ZuhsRW exclusion clicking the pencil would suddenly match\n this sheet rule: the dialog jumps to the top of the screen, the header\n (with the path input) is hidden by the > :first-child > :first-child\n display:none rule below, and the user can no longer type a path\n (issue #12, 2026-08-16). The picker family keeps the official layout\n on mobile in every mode. */\n /* DSH 0.2.1-rc.2 renders this dialog as a body PORTAL\n (body > overlay > panel), so the placement below must key off the nav\n list the panel owns, not off a guessed child depth: that is both the\n stable \"this is the settings sheet\" anchor and the reason the safe-area\n offset below still applies inside the portal (the constants live on\n :root, so they cross the portal boundary). The bottom inset is\n subtracted too \u2014 a tall panel must not run under the home indicator. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])):has([class$=\"_navList\"]) {\n position: absolute !important;\n left: 8px !important;\n /* Fixed top (no translateY): a transform on the panel combined with the\n panel overflowing the max-content drawer shifts the fixed overlay's\n coordinate frame, dragging the whole sidebar content off-screen. The\n safe-area inset keeps the sheet below the status bar / notch. */\n top: calc(var(--mnav-sat) + 12px) !important;\n width: calc(100vw - 16px) !important;\n max-width: calc(100vw - 16px) !important;\n /* Height follows the content (no dead space under a short page); it\n caps at 100dvh-24 (less both safe-area insets) and the options area\n scrolls only then. */\n height: auto !important;\n max-height: min(800px, calc(100vh - 24px - var(--mnav-sat) - var(--mnav-sab))) !important;\n max-height: min(800px, calc(100dvh - 24px - var(--mnav-sat) - var(--mnav-sab))) !important;\n flex-direction: column !important;\n border-radius: 14px !important;\n animation: dsh-mobile-nav-sheet-in .22s var(--ds-ease-out, ease-in-out);\n }\n /* The settings sheet's dimmed mask fades in with the panel (the mask is\n the first child of the overlay that directly contains the sheet). */\n :has(> [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"]))) > :first-child {\n animation: dsh-mobile-nav-fade .18s var(--ds-ease-out, ease-in-out);\n }\n @media (prefers-reduced-motion: reduce) {\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])),\n :has(> [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"]))) > :first-child {\n animation: none !important;\n }\n }\n /* The export dialog (not the settings sheet) must never overflow the\n viewport: the official centered card can be wider than 390px.\n :not([data-mobile-nav=\"info-sheet\"]) (S4, 2026-08-17): the session-info\n sheet also carries role=\"dialog\" aria-modal=\"true\" (correct a11y\n semantics for a bottom sheet with a scrim) and has no button as its\n first-child's last-child, so without this exclusion it silently matched\n this generic selector too \u2014 measured 358px (100vw-32px) instead of the\n 374px its own left:8px/right:8px margins specify. Same category of bug\n as the ZuhsRW directory-picker collision below; same fix shape.\n :not([data-mobile-nav=\"share-range-sheet\"]) (share-image, 2026-09-10):\n the share range picker rides the same role=\"dialog\" aria-modal bottom\n -sheet shape and the same margins, so it hit the identical clamp. */\n [aria-modal=\"true\"]:not(:has(> :first-child > :last-child > button)):not([data-mobile-nav=\"info-sheet\"]):not([data-mobile-nav=\"share-range-sheet\"]) {\n max-width: calc(100vw - 32px) !important;\n }\n /* Nav bar: hide the \"Settings\" caption (redundant on a full-width sheet)\n and wrap the tab list so every tab is visible \u2014 a horizontal scroll cut\n the last tab (\"Plugins\") off with no affordance to scroll. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :first-child {\n width: 100% !important;\n flex-direction: row !important;\n align-items: center !important;\n gap: 6px !important;\n padding: 10px 12px 8px !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :first-child > :first-child {\n display: none !important;\n }\n /* The tab list scrolls in the space left by the toolbar: the toolbar\n (config file + close) is reparented INTO this nav row by a client\n effect (MobileNavOverlay), so the tab list must be anchored by its\n class, NOT by :last-child (the reparented toolbar becomes the nav's\n new last child).\n\n 2026-10-21 (DSH 0.2.1-rc.2): this rule used to declare\n \"flex-wrap: wrap; overflow: visible\" on top of the flex/min-width/gap\n above. Because it is one class-anchored compound selector with a much\n higher specificity than compat.css.ts's portal-scoped navList rule, it\n silently won the tie and the tab list wrapped into two rows \u2014 with the\n reparented \u2715 vertically centred across both of them. Measured on a\n phone shell: the list was 86px tall (two rows) instead of one 40px row,\n and it scrolled nowhere. The wrap was a 2026-08-16 trade-off (show every\n tab, no hidden scroll cut-off); with the thin scrollbar affordance now\n in compat.css.ts the single scrolling row is the better trade, so the\n two declarations live there and this rule no longer contradicts them. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :first-child [class$=\"_navList\"] {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n flex-direction: row !important;\n gap: 6px !important;\n }\n /* Content toolbar (Open configuration file + close): grouped flush to\n the right edge, and reparented INTO the nav row on mobile so it shares\n one line with the tabs (user feedback 2026-08-16 \u2014 the toolbar's own\n row left a full-width dead gap under the tabs). Anchored by class: the\n header leaves the content subtree, so :first-child/:last-child anchors\n would now hit the options area. Children carry official auto-margins\n that would defeat flex-end, so neutralize them. The close button gets\n a round tappable base so it reads as its own control, not part of the\n outline button. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) [class$=\"_header\"] {\n flex: 0 0 auto !important;\n justify-content: flex-end !important;\n align-items: center !important;\n gap: 8px !important;\n padding: 0 0 0 4px !important;\n min-height: 40px !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) [class$=\"_header\"] > * {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) [class$=\"_header\"] > :last-child {\n width: 32px !important;\n height: 32px !important;\n border-radius: 50% !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06)) !important;\n }\n /* Appearance mode cards: the official cube row renders three tall\n vertical cards (~268px) that eat half the sheet. Turn them into a\n compact horizontal trio (icon + label inline, equal widths).\n Relies on the official cube-row class name of this version. */\n [aria-modal=\"true\"] [class$=\"_cubeRow\"] {\n gap: 6px !important;\n }\n [aria-modal=\"true\"] [class$=\"_cubeRow\"] > * {\n flex: 1 1 0 !important;\n flex-direction: row !important;\n align-items: center !important;\n justify-content: center !important;\n gap: 6px !important;\n padding: 10px 8px !important;\n min-height: 0 !important;\n }\n /* Content: the options scroll area gets bottom breathing room so the last\n row never sits flush against the sheet's rounded corner. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :last-child {\n flex: 1 1 auto !important;\n min-height: 0 !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :last-child > :last-child {\n padding: 0 12px 24px !important;\n }\n";
|
|
1
|
+
export declare const LAYOUT_CSS = "/* ---------- mobile-only layout ---------- */\n\n@media (max-width: 1023px) {\n /* --- Phone chrome ---\n The system status bar stays visible (no fullscreen). Two adjustments\n make it behave:\n - touch-action: manipulation kills double-tap-to-zoom (and the 300ms\n tap delay) while keeping pan and pinch zoom; the client also\n suppresses legacy-iOS gesturestart as a fallback.\n - With the client's viewport-fit=cover, env(safe-area-inset-top) is the\n status bar / notch height; the rules below push the app content below\n it so the status bar never covers anything. Off notched phones (or in\n a normal browser tab where the layout viewport already sits below the\n status bar) the inset is 0 and nothing shifts. */\n html,\n body {\n touch-action: manipulation !important;\n }\n\n /* AppFrame: the drawer takes the sidebar column out of grid flow, so the\n remaining in-flow items (center, details) land in tracks 1..2: give the\n center every pixel and keep the details track at zero. The top padding\n clears the status bar / notch for every in-flow surface (session header,\n messages, composer); the absolutely-positioned drawer is unaffected (its\n containing block is the frame's padding box, i.e. still the frame top). */\n /* box-sizing: border-box is load-bearing (S2.1, 2026-08-17). The official\n frame carries height: 100% with the default content-box, so the\n safe-area padding ADDED 54px to its height instead of taking 54px out\n of the content area: the frame grew past the viewport, the document\n became scrollable by exactly the inset, and the very first scroll put\n the header right back under the notch \u2014 measured with\n ?mobile-nav-inset=54 (frame 898px tall inside an 844px root, html at\n y=-54). Invisible on every desktop browser because the inset is 0\n there, which is how it shipped. */\n [data-mobile-nav=\"frame\"] {\n position: relative !important;\n box-sizing: border-box !important;\n grid-template-columns: minmax(0, 1fr) 0 0 !important;\n padding-top: var(--mnav-sat) !important;\n }\n\n /* The sidebar column (first grid child) becomes a left drawer. The drawer\n hugs the sidebar content exactly (the wide sidebar carries an inline\n width, ~280px): a fixed 92vw box would leave a white strip where the\n container background shows beside the content.\n Closed state: translateX(-110%) \u2014 more than -100% of the max-content\n width \u2014 guarantees the whole drawer (and its shadow, had it one) leaves\n the viewport. A mere -100% leaves a sliver on screen; -105% (as used\n before) left 14px of the drawer plus a long 32px-blur shadow gradient\n visible along the left edge of the main UI. No box-shadow at all: the\n dimmed backdrop already separates drawer from content. */\n [data-mobile-nav=\"frame\"] > :first-child {\n position: absolute !important;\n inset: 0 auto 0 0 !important;\n width: max-content !important;\n max-width: 92vw !important;\n z-index: 40 !important;\n transform: translateX(-110%);\n transition: transform .28s var(--ds-ease-in-out, ease-in-out);\n background: var(--dsw-alias-bg-base, #ffffff);\n /* Keep the drawer's own content below the status bar / notch: the drawer\n spans the full frame height (its absolute containing block is the\n frame's padding box, so the frame's own safe-area padding does NOT\n reach it). The drawer background paints the status-bar strip, which\n the client's theme-color meta matches, so the strip reads seamless. */\n padding-top: var(--mnav-sat) !important;\n /* Kill the official sidebarCol right border: with the backdrop the edge\n reads cleanly, and the settings dialog (width:100% of this box) stays\n pixel-flush with the drawer. */\n border-right: none !important;\n }\n\n /* The official right sidebar (DSH 0.1.5+) in its full-screen mode \u2014 the\n one the phone's header sidebar button opens (sidebar-panels.ts). The\n host promotes the panel to position:fixed; inset:0 there, so exactly\n like the drawer above it escapes the frame's safe-area padding and its\n tab strip + chrome buttons landed under the status bar (real-device\n report, 2026-09-21). Both insets: the status bar / notch on top, the\n home indicator at the bottom. Padding, no box-sizing change: fixed\n with both top and bottom set resolves its used height from the\n containing block minus padding (CSS 2.1 10.6.4), so the content box\n shrinks by itself \u2014 the same reasoning the legacy better-sidebar panel\n rule in compat.css.ts spells out. `fullscreen` is the host's own\n attribute value (`push` while docked, dsh-client-ui-sidebar-right), so\n the docked panel is untouched; a manual full-screen on desktop is\n outside this media block anyway. Verify with ?mobile-nav-inset=54,34 \u2014\n env() is 0 in every desktop browser. */\n [data-sidebar-right-panel=\"fullscreen\"] {\n padding-top: var(--mnav-sat) !important;\n padding-bottom: var(--mnav-sab) !important;\n }\n\n /* Expanded state (frame without data-sidebar-collapsed) slides the drawer in.\n The open state must be transform:none \u2014 NOT translateX(0): an identity\n transform still makes the drawer the containing block for fixed-position\n descendants (the settings dialog's .VOzbGW_overlay is portaled into the\n sidebar DOM). With the identity transform the wide settings sheet\n (100vw-16) overflows the 280px drawer, the dialog's focus scrolls the\n overflow:hidden drawer to scrollLeft=102, and every static child (plus the\n fixed overlay) shifts 102px off-screen. With transform:none the overlay is\n viewport-anchored: it dims the full screen and the sheet sits at left:8. */\n [data-mobile-nav=\"frame\"]:not([data-sidebar-collapsed]) > :first-child {\n transform: none !important;\n }\n\n /* Drag handles are useless on touch and would float over the drawer. */\n [data-side=\"sidebar\"],\n [data-side=\"details\"] {\n display: none !important;\n }\n\n /* --- Conversation text on mobile ---\n The official message flow keeps desktop's 32px side gutters and 16px\n type. On a phone: shrink the type a notch and widen the lines by\n trimming the gutters (the sidebar drawer list keeps its size). The\n flow's scroll container is the only _scroll element holding markdown\n <p> paragraphs \u2014 the composer's own scroll (textarea) is excluded\n via :has(p). */\n /* The official main scroll body reserves scrollbar-gutter for desktop\n scrollbars (8px), which shoves every column off-center on a phone.\n Classic desktop scrollbars (Edge/Chrome) also occupy ~8-17px in a\n phone-sized viewport, shifting the column further. Mobile scrolling\n is touch/wheel, so remove the scrollbar entirely on phones: the\n column is then exactly centered in every browser. */\n [data-phase] [class$=\"_scrollBody\"] {\n scrollbar-gutter: auto !important;\n scrollbar-width: none !important;\n }\n [data-phase] [class$=\"_scrollBody\"]::-webkit-scrollbar {\n display: none !important;\n width: 0 !important;\n height: 0 !important;\n }\n /* Message action rows (copy / run-time badges) can overflow the right\n edge on narrow screens \u2014 keep them inside the message width. */\n [data-phase] [class$=\"_actions\"] {\n overflow: hidden !important;\n }\n /* The 24h clock (\"18:06\" / \"MM-DD 18:06\") is a fixed-size item: it must\n never be the thing that shrinks. DSH 0.2.x wraps it with the usage\n button in an inline-flex _endInfo (min-width: 0), so a shrinkable\n time (the old flex: 0 1 auto + min-width: 0) got squeezed inside that\n non-wrapping box and \"18:06\" broke into two lines. flex: none pins its\n width; the turn-tail rules in content.css.ts let _endInfo wrap as a\n whole instead. */\n [data-phase] [class$=\"_actions\"] [class$=\"_timeEnd\"] {\n flex: none !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n }\n\n [data-phase] [class$=\"_scroll\"]:has(p) {\n padding-left: 20px !important;\n padding-right: 20px !important;\n font-size: 15px !important;\n }\n /* The official markdown styles set an explicit 16px on paragraphs and\n list items, so the container's inherited 15px is not enough. User\n messages render their text in a div whose class carries _text_\n (16px too) \u2014 cover it as well. */\n [data-phase] [class$=\"_scroll\"]:has(p) p,\n [data-phase] [class$=\"_scroll\"]:has(p) li,\n [data-phase] [class$=\"_scroll\"]:has(p) [class*=\"_text_\"] {\n font-size: 15px !important;\n }\n\n /* Markdown tables: the official table uses width:max-content, so on a phone\n it hugs the content and leaves dead space beside/inside the table. Force\n the table to fill the message column and let the table wrapper handle\n overflow if a cell is genuinely too wide. */\n [data-phase] table {\n width: 100% !important;\n max-width: 100% !important;\n }\n [data-phase] th,\n [data-phase] td {\n max-width: none !important;\n min-width: 0 !important;\n }\n\n /* User bubbles: the official stack is capped at min(525px, 82%), which on a\n phone leaves a large blank strip on the left and pushes the bubble high.\n On mobile let the user message fill the same full width as assistant\n messages (the bubble background then spans the whole message column). */\n [data-phase] [class$=\"_userStack\"],\n [data-phase] [class$=\"_userStack\"] [class$=\"_bubble\"] {\n box-sizing: border-box !important;\n width: fit-content !important;\n max-width: 100% !important;\n }\n\n /* --- Composer bottom row on mobile ---\n The official row gives the model pill (trailing) flex:0 0 auto, which\n squeezes the agent-permission pill (modes) down to 15px: the pill's\n chevron then overflows on top of the model name. Let the permission\n pill keep its natural width and let the model pill shrink instead.\n Anchored by the composer card (:has(textarea)): row = the _row class\n containing a _trailing group, tools = its first child, permission pill\n = its 2nd child, model pill = the _trailing group.\n NOTE: do NOT anchor these by the card's :last-child \u2014 a client effect\n moves the git-graph branch chip INTO the card, which becomes the card's\n new last child and silently disables every :last-child rule (the model\n pill then falls back to the official fixed layout and long model IDs\n overflow instead of ellipsizing). Structural anchors only. */\n /* The official row pads every group with 12px gaps, which on a phone eats\n width the model pill needs for the full model ID. Tighten the row to 8px\n gaps (the modes pill keeps its natural width) so the model name gets\n every spare pixel. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_row\"]:has([class$=\"_trailing\"]) {\n gap: 8px !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_row\"]:has([class$=\"_trailing\"]) > :first-child {\n gap: 8px !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_row\"]:has([class$=\"_trailing\"]) > :first-child > :nth-child(2) {\n flex: 0 0 auto !important;\n gap: 8px !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_trailing\"] {\n flex: 1 1 auto !important;\n gap: 8px !important;\n min-width: 0 !important;\n }\n /* Let the model selector take the free space in the trailing group so the\n model name is not squeezed/truncated; the context meter stays fixed. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"][aria-haspopup=\"menu\"]) {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"][aria-haspopup=\"menu\"]) > [class$=\"_trigger\"] {\n width: 100% !important;\n max-width: 100% !important;\n }\n /* The model label must absorb the trigger's free width: officially it is a\n fixed-content flex item, so the spare width of a grown pill sits unused\n between the chevron and the pill edge. Let the label grow and shrink:\n the full model ID shows whenever the row can fit it, and the ellipsis\n lands exactly at the available width otherwise. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"][aria-haspopup=\"menu\"]) > [class$=\"_trigger\"] > [class$=\"_triggerLabel\"] {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n }\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"]:not([aria-haspopup=\"menu\"])) {\n flex: 0 0 auto !important;\n }\n\n /* Model switcher menu: the official dropdown is right-aligned to the\n trigger (right:0). The model pill sits near the center of the composer,\n so on a phone the 240px menu overflows the left edge and looks off-center.\n Center the menu on the trigger instead. */\n [data-phase] [class*=\"_card\"]:has(textarea) [class$=\"_root\"]:has(> [class$=\"_trigger\"]) > [class$=\"_menu\"] {\n left: 50% !important;\n right: auto !important;\n transform: translateX(-50%) !important;\n }\n\n /* --- Session header on mobile ---\n Layout goal: [toggle] [session title] [mode badge] in a row, with the\n Session log capsule removed from the header (relocated to the drawer\n footer). Stable structural hooks only:\n [data-phase] header the session header element\n header > :first-child titleRow (titleCluster + utilities)\n header > :first-child > :last-child headerUtilities (Session log seat) */\n [data-phase] header {\n padding-right: 12px !important;\n }\n /* Give the title row a lane clear of the absolutely-placed toggle, then\n balance the header: with header padding-right 12px, a 20px left\n padding puts the title's geometric center exactly on the viewport\n center (measured 195/195 at 390px). */\n [data-phase] header > :first-child {\n padding-left: 20px !important;\n }\n /* The directory toggle sits at the far left of the header (the header\n is position:relative; the data-slot wrappers are display:contents). */\n [data-mobile-nav=\"toggle\"] {\n position: absolute !important;\n left: 8px !important;\n top: 12px !important;\n z-index: 2 !important;\n }\n /* The Files action stays in-flow inside headerActions. On mobile headerActions\n does not expand to fill the row: it is pushed to the right edge and keeps\n its content size, so [mode] [subagent/jobs] [files] sit close together\n with the normal 8px gaps \u2014 compact, no artificial blank columns. Explicit\n flex order keeps Files rightmost regardless of DOM order. */\n [data-mobile-nav=\"files\"] {\n position: static !important;\n left: auto !important;\n right: auto !important;\n top: auto !important;\n z-index: auto !important;\n }\n [data-phase] header [class$=\"_headerActions\"] {\n flex: 0 1 auto !important;\n min-width: 0 !important;\n margin-left: auto !important;\n justify-content: flex-end !important;\n }\n /* The session title/crumb must yield space on mobile so the mode label and\n subagent cluster are not squeezed to a single letter. Cap it at ~24vw and\n let it truncate with ellipsis. */\n [data-phase] header [class$=\"_crumbs\"] {\n flex: 0 1 auto !important;\n min-width: 0 !important;\n max-width: 24vw !important;\n }\n /* Mode label (AgentPresetLabel): the official pill uses inline-flex, whose\n direct text node is only clipped \u2014 no ellipsis. Convert the pill to a\n block container, keep its icon absolutely positioned on the left, and let\n it size naturally up to 42vw so the mode name stays readable while the\n subagent/Files cluster still fits on a phone. */\n [data-phase] header [class$=\"_label\"]:has(> svg) {\n order: 1 !important;\n flex: 0 1 auto !important;\n min-width: 0 !important;\n max-width: 42vw !important;\n display: block !important;\n position: relative !important;\n box-sizing: border-box !important;\n padding-left: 18px !important;\n padding-right: 2px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n }\n [data-phase] header [class$=\"_label\"]:has(> svg) > svg {\n position: absolute !important;\n left: 0 !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n }\n /* Subagent/jobs helpers: keep their triggers on one line and never let the\n row grow artificial empty space. */\n [data-phase] header [class$=\"_root\"]:has(> button[class$=\"_trigger\"]) {\n order: 2 !important;\n flex: 0 0 auto !important;\n min-width: max-content !important;\n max-width: none !important;\n white-space: nowrap !important;\n /* On mobile the popover is anchored to the header (viewport-width\n containing block) instead of the trigger, so a small left inset keeps it\n fully on screen and never clips the tree's status dots. */\n position: static !important;\n }\n [data-phase] header [class$=\"_root\"]:has(> button[class$=\"_trigger\"]) > button,\n [data-phase] header [class$=\"_root\"]:has(> button[class$=\"_trigger\"]) > button * {\n white-space: nowrap !important;\n }\n [data-phase] header [data-mobile-nav=\"files\"] {\n order: 3 !important;\n flex: 0 0 auto !important;\n }\n /* Session log download: gone from the header row on mobile (the utilities\n seat holds only the session-log-export capsule). */\n [data-phase] header > :first-child > :last-child {\n display: none !important;\n }\n\n /* --- Header popovers on mobile (dsh-client-ui-jobs / dsh-client-ui-subagent) ---\n The official entries sit in the session header actions. Their popovers\n are anchored to the trigger's LEFT edge (left: 0), so from a right-edge\n trigger the 336px panel spills past the viewport. Re-anchor them to the\n trigger's right edge instead. The popover classes are hashed CSS-module\n names, so target them by the stable _menu suffix inside the header. */\n /* Header popovers on mobile: anchor to the left edge with a small inset and\n clamp the width, instead of right-aligning to a trigger near the right\n edge (which pushed the panel left off-screen and clipped the status dots).\n Also cap the height so the panel does not run into the composer/task bar. */\n [data-phase] header [class$=\"_menu\"] {\n left: 8px !important;\n right: auto !important;\n width: min(336px, calc(100vw - 16px)) !important;\n max-width: none !important;\n max-height: min(420px, calc(100dvh - 120px)) !important;\n }\n /* --- Settings dialog on mobile ---\n Desktop: 800px two-column flex (188px nav + content). Mobile: a\n near-full-width sheet \u2014 nav tabs wrap into rows on top, option rows\n stay horizontal (title+description left, control right). Structural\n selectors are scoped to the unique aria-modal dialog; every\n settings-specific rule is gated with\n :has(> :first-child > :last-child > button) \u2014 the settings nav tab\n list holds <button> tabs, so the transient export dialog (the same\n primitives Modal, header(title+close)+description+body) keeps its\n official centered card layout. Requires :has() support\n (Chromium 105+, 2022).\n\n The directory picker (dsh-client-ui-directory-picker-browse) must be\n excluded too: its footer bar holds <button> children AND its breadcrumb\n trail (role=\"navigation\") \u2014 which the role gate relies on to exclude\n it \u2014 is REPLACED by the path input in edit mode (pencil button), so\n without the ZuhsRW exclusion clicking the pencil would suddenly match\n this sheet rule: the dialog jumps to the top of the screen, the header\n (with the path input) is hidden by the > :first-child > :first-child\n display:none rule below, and the user can no longer type a path\n (issue #12, 2026-08-16). The picker family keeps the official layout\n on mobile in every mode. */\n /* DSH 0.2.1-rc.2 renders this dialog as a body PORTAL\n (body > overlay > panel), so the placement below must key off the nav\n list the panel owns, not off a guessed child depth: that is both the\n stable \"this is the settings sheet\" anchor and the reason the safe-area\n offset below still applies inside the portal (the constants live on\n :root, so they cross the portal boundary). The bottom inset is\n subtracted too \u2014 a tall panel must not run under the home indicator. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])):has([class$=\"_navList\"]) {\n position: absolute !important;\n left: 8px !important;\n /* Fixed top (no translateY): a transform on the panel combined with the\n panel overflowing the max-content drawer shifts the fixed overlay's\n coordinate frame, dragging the whole sidebar content off-screen. The\n safe-area inset keeps the sheet below the status bar / notch. */\n top: calc(var(--mnav-sat) + 12px) !important;\n width: calc(100vw - 16px) !important;\n max-width: calc(100vw - 16px) !important;\n /* Height follows the content (no dead space under a short page); it\n caps at 100dvh-24 (less both safe-area insets) and the options area\n scrolls only then. */\n height: auto !important;\n max-height: min(800px, calc(100vh - 24px - var(--mnav-sat) - var(--mnav-sab))) !important;\n max-height: min(800px, calc(100dvh - 24px - var(--mnav-sat) - var(--mnav-sab))) !important;\n flex-direction: column !important;\n border-radius: 14px !important;\n animation: dsh-mobile-nav-sheet-in .22s var(--ds-ease-out, ease-in-out);\n }\n /* The settings sheet's dimmed mask fades in with the panel (the mask is\n the first child of the overlay that directly contains the sheet). */\n :has(> [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"]))) > :first-child {\n animation: dsh-mobile-nav-fade .18s var(--ds-ease-out, ease-in-out);\n }\n @media (prefers-reduced-motion: reduce) {\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])),\n :has(> [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"]))) > :first-child {\n animation: none !important;\n }\n }\n /* The export dialog (not the settings sheet) must never overflow the\n viewport: the official centered card can be wider than 390px.\n :not([data-mobile-nav=\"info-sheet\"]) (S4, 2026-08-17): the session-info\n sheet also carries role=\"dialog\" aria-modal=\"true\" (correct a11y\n semantics for a bottom sheet with a scrim) and has no button as its\n first-child's last-child, so without this exclusion it silently matched\n this generic selector too \u2014 measured 358px (100vw-32px) instead of the\n 374px its own left:8px/right:8px margins specify. Same category of bug\n as the ZuhsRW directory-picker collision below; same fix shape.\n :not([data-mobile-nav=\"share-range-sheet\"]) (share-image, 2026-09-10):\n the share range picker rides the same role=\"dialog\" aria-modal bottom\n -sheet shape and the same margins, so it hit the identical clamp. */\n [aria-modal=\"true\"]:not(:has(> :first-child > :last-child > button)):not([data-mobile-nav=\"info-sheet\"]):not([data-mobile-nav=\"share-range-sheet\"]) {\n max-width: calc(100vw - 32px) !important;\n }\n /* Nav bar: hide the \"Settings\" caption (redundant on a full-width sheet)\n and wrap the tab list so every tab is visible \u2014 a horizontal scroll cut\n the last tab (\"Plugins\") off with no affordance to scroll. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :first-child {\n width: 100% !important;\n flex-direction: row !important;\n align-items: center !important;\n gap: 6px !important;\n padding: 10px 12px 8px !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :first-child > :first-child {\n display: none !important;\n }\n /* The tab list scrolls in the space left by the toolbar: the toolbar\n (config file + close) is reparented INTO this nav row by a client\n effect (MobileNavOverlay), so the tab list must be anchored by its\n class, NOT by :last-child (the reparented toolbar becomes the nav's\n new last child).\n\n 2026-10-21 (DSH 0.2.1-rc.2): this rule used to declare\n \"flex-wrap: wrap; overflow: visible\" on top of the flex/min-width/gap\n above. Because it is one class-anchored compound selector with a much\n higher specificity than compat.css.ts's portal-scoped navList rule, it\n silently won the tie and the tab list wrapped into two rows \u2014 with the\n reparented \u2715 vertically centred across both of them. Measured on a\n phone shell: the list was 86px tall (two rows) instead of one 40px row,\n and it scrolled nowhere. The wrap was a 2026-08-16 trade-off (show every\n tab, no hidden scroll cut-off); with the thin scrollbar affordance now\n in compat.css.ts the single scrolling row is the better trade, so the\n two declarations live there and this rule no longer contradicts them. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :first-child [class$=\"_navList\"] {\n flex: 1 1 auto !important;\n min-width: 0 !important;\n flex-direction: row !important;\n gap: 6px !important;\n }\n /* Content toolbar (Open configuration file + close): grouped flush to\n the right edge, and reparented INTO the nav row on mobile so it shares\n one line with the tabs (user feedback 2026-08-16 \u2014 the toolbar's own\n row left a full-width dead gap under the tabs). Anchored by class: the\n header leaves the content subtree, so :first-child/:last-child anchors\n would now hit the options area. Children carry official auto-margins\n that would defeat flex-end, so neutralize them. The close button gets\n a round tappable base so it reads as its own control, not part of the\n outline button. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) [class$=\"_header\"] {\n flex: 0 0 auto !important;\n justify-content: flex-end !important;\n align-items: center !important;\n gap: 8px !important;\n padding: 0 0 0 4px !important;\n min-height: 40px !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) [class$=\"_header\"] > * {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) [class$=\"_header\"] > :last-child {\n width: 32px !important;\n height: 32px !important;\n border-radius: 50% !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, .06)) !important;\n }\n /* Appearance mode cards: the official cube row renders three tall\n vertical cards (~268px) that eat half the sheet. Turn them into a\n compact horizontal trio (icon + label inline, equal widths).\n Relies on the official cube-row class name of this version. */\n [aria-modal=\"true\"] [class$=\"_cubeRow\"] {\n gap: 6px !important;\n }\n [aria-modal=\"true\"] [class$=\"_cubeRow\"] > * {\n flex: 1 1 0 !important;\n flex-direction: row !important;\n align-items: center !important;\n justify-content: center !important;\n gap: 6px !important;\n padding: 10px 8px !important;\n min-height: 0 !important;\n }\n /* Content: the options scroll area gets bottom breathing room so the last\n row never sits flush against the sheet's rounded corner. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :last-child {\n flex: 1 1 auto !important;\n min-height: 0 !important;\n }\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])) > :last-child > :last-child {\n padding: 0 12px 24px !important;\n }\n";
|
|
2
2
|
//# sourceMappingURL=layout.css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.css.d.ts","sourceRoot":"","sources":["../../../../src/client/styles/layout.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"layout.css.d.ts","sourceRoot":"","sources":["../../../../src/client/styles/layout.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,+p5BA+hBtB,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MISC_CSS = " /* ---------- hero composer on mobile ----------\n The official hero card carries a 2-line textarea plus a tall tool row,\n which reads oversized on a phone. Tighten the empty-state rhythm: keep\n the official centered hero, shrink the textarea line box, slim the card\n padding and the tool row, and close the gap under the headline. */\n\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea) {\n padding-top: 6px !important;\n gap: 8px !important;\n }\n /* The official composer autosizes the textarea and writes an inline\n height (2 lines on the hero empty state) on the textarea's scroll/grow\n wrappers. :placeholder-shown lets us collapse the EMPTY state to one\n line with !important; as soon as the user types, the pseudo-class no\n longer matches and the autosizer's inline height takes over again \u2014 so\n multi-line growth keeps working. */\n [data-phase=\"hero\"] textarea:placeholder-shown {\n height: 28px !important;\n }\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea:placeholder-shown) > [class$=\"_scroll\"],\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea:placeholder-shown) [class$=\"_grow\"] {\n height: 28px !important;\n }\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea) > [class$=\"_row\"] {\n padding-top: 2px !important;\n }\n [data-phase=\"hero\"] [class$=\"_headline\"] {\n line-height: 1.15 !important;\n margin-bottom: 0 !important;\n }\n [data-phase=\"hero\"] [class$=\"_stack\"] {\n gap: 0 !important;\n }\n\n /* ---------- composer dock: swap git branch chip with the todo card ----------\n The git-graph branch chip (conversation.input.dock, order 100) floats\n alone at the bottom-left above the input card, with a dead zone to its\n right; the full-width todo card (order 0) sits above it. Swap them so\n the chip reads as the stack's top row and the todo card fills the row\n above the composer. The dock container itself is display:contents\n (inline style) \u2014 its children are direct flex items of the composer\n stack, so order on the children is what reorders them. Only the chip\n needs an order change: -1 puts it before the todo card (order 0) and\n before the input card (order 0, later in DOM). The todo card must KEEP\n its order 0 \u2014 raising it past the input card's order 0 would drop it\n below the composer entirely (2026-08-16 regression, fixed). The queue\n strip (order 20) keeps hugging the input card. Desktop untouched (this\n block lives inside the max-width: 1023px media query). */\n [data-slot=\"conversation.input.dock\"] [data-gitgraph-chip-anchor] {\n order: -1 !important;\n }\n /* Mobile tap target + feedback for the branch chip (git-graph, 24px\n desktop spec). Two real-world problems: \u2460 the chip is tiny and sits\n right above the expandable todo card \u2014 mis-taps land on the todo card;\n \u2461 opening the popover waits for the host's /git/branches round-trip\n (~700ms on device) with zero feedback, so users tap again and toggle\n the popover closed. Enlarge the target, kill double-tap zoom delay,\n and give an instant pressed state so a tap reads as registered. */\n [data-slot=\"conversation.input.dock\"] [data-gitgraph-chip-anchor] [data-gitgraph-chip] {\n touch-action: manipulation !important;\n min-height: 34px !important;\n padding: 0 12px !important;\n font-size: 13px !important;\n }\n [data-slot=\"conversation.input.dock\"] [data-gitgraph-chip-anchor] [data-gitgraph-chip]:active {\n transform: scale(.96) !important;\n transition: transform .12s !important;\n }\n}\n\n/* ---------- tablet / wide mobile: keep sheets from becoming full-width ----------\n Below 768px the near-full-width sheets are the right call for a phone.\n On wider but still sub-desktop viewports (foldables, tablet portrait,\n desktop-mode tall windows) the same full-bleed sheet leaves content\n clustered at the left edge with a large dead zone on the right. Cap and\n center the modal sheets and the aionui bottom sheets instead. */\n@media (min-width: 768px) and (max-width: 1023px) {\n /* All modal dialogs: centered, never edge-to-edge. The settings sheet has\n a higher-specificity full-width rule above, so repeat its selector here\n to win; the generic export/other-modal rule is covered by the second\n selector. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])),\n [aria-modal=\"true\"]:not(:has(> :first-child > :last-child > button)) {\n left: 0 !important;\n right: 0 !important;\n margin-left: auto !important;\n margin-right: auto !important;\n width: min(calc(100vw - 32px), 720px) !important;\n max-width: min(calc(100vw - 32px), 720px) !important;\n }\n\n /* The dsh-web-ui explorer / preview bottom sheets: same treatment \u2014 keep\n the mobile bottom-sheet behavior, but stop them spanning the full width. */\n [data-aionui-explorer-col],\n [data-aionui-preview-col] {\n left: 0 !important;\n right: 0 !important;\n width: min(calc(100vw - 32px), 720px) !important;\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n /* Settings sections (e.g. Agent presets) often carry a desktop max-width\n (720px) that leaves a dead strip on the right once the sheet is capped to\n the same width; let them fill the sheet body instead. */\n [aria-modal=\"true\"] [class$=\"_section\"] {\n width: 100% !important;\n max-width: none !important;\n }\n}\n\n/* ---------- desktop: the mobile controls must never appear ---------- */\n\n@media (min-width: 1024px) {\n [data-mobile-nav=\"toggle\"],\n [data-mobile-nav=\"files\"],\n [data-mobile-nav=\"fab\"],\n [data-mobile-nav=\"backdrop\"],\n [data-mobile-nav=\"session-log\"],\n [data-mobile-nav=\"explorer\"],\n [data-mobile-nav=\"drawer-actions\"] {\n display: none !important;\n }\n}\n";
|
|
1
|
+
export declare const MISC_CSS = " /* ---------- hero composer on mobile ----------\n The official hero card carries a 2-line textarea plus a tall tool row,\n which reads oversized on a phone. Tighten the empty-state rhythm: keep\n the official centered hero, shrink the textarea line box, slim the card\n padding and the tool row, and close the gap under the headline. */\n\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea) {\n padding-top: 6px !important;\n gap: 8px !important;\n }\n /* The official composer autosizes the textarea and writes an inline\n height (2 lines on the hero empty state) on the textarea's scroll/grow\n wrappers. :placeholder-shown lets us collapse the EMPTY state to one\n line with !important; as soon as the user types, the pseudo-class no\n longer matches and the autosizer's inline height takes over again \u2014 so\n multi-line growth keeps working. */\n [data-phase=\"hero\"] textarea:placeholder-shown {\n height: 28px !important;\n }\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea:placeholder-shown) > [class$=\"_scroll\"],\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea:placeholder-shown) [class$=\"_grow\"] {\n height: 28px !important;\n }\n [data-phase=\"hero\"] [class$=\"_card\"]:has(textarea) > [class$=\"_row\"] {\n padding-top: 2px !important;\n }\n [data-phase=\"hero\"] [class$=\"_headline\"] {\n line-height: 1.15 !important;\n margin-bottom: 0 !important;\n }\n [data-phase=\"hero\"] [class$=\"_stack\"] {\n gap: 0 !important;\n }\n\n /* ---------- composer dock: swap git branch chip with the todo card ----------\n The git-graph branch chip (conversation.input.dock, order 100) floats\n alone at the bottom-left above the input card, with a dead zone to its\n right; the full-width todo card (order 0) sits above it. Swap them so\n the chip reads as the stack's top row and the todo card fills the row\n above the composer. The dock container itself is display:contents\n (inline style) \u2014 its children are direct flex items of the composer\n stack, so order on the children is what reorders them. Only the chip\n needs an order change: -1 puts it before the todo card (order 0) and\n before the input card (order 0, later in DOM). The todo card must KEEP\n its order 0 \u2014 raising it past the input card's order 0 would drop it\n below the composer entirely (2026-08-16 regression, fixed). The queue\n strip (order 20) keeps hugging the input card. Desktop untouched (this\n block lives inside the max-width: 1023px media query). */\n [data-slot=\"conversation.input.dock\"] [data-gitgraph-chip-anchor] {\n order: -1 !important;\n }\n /* Mobile tap target + feedback for the branch chip (git-graph, 24px\n desktop spec). Two real-world problems: \u2460 the chip is tiny and sits\n right above the expandable todo card \u2014 mis-taps land on the todo card;\n \u2461 opening the popover waits for the host's /git/branches round-trip\n (~700ms on device) with zero feedback, so users tap again and toggle\n the popover closed. Enlarge the target, kill double-tap zoom delay,\n and give an instant pressed state so a tap reads as registered. */\n [data-slot=\"conversation.input.dock\"] [data-gitgraph-chip-anchor] [data-gitgraph-chip] {\n touch-action: manipulation !important;\n min-height: 34px !important;\n padding: 0 12px !important;\n font-size: 13px !important;\n }\n [data-slot=\"conversation.input.dock\"] [data-gitgraph-chip-anchor] [data-gitgraph-chip]:active {\n transform: scale(.96) !important;\n transition: transform .12s !important;\n }\n}\n\n/* ---------- tablet / wide mobile: keep sheets from becoming full-width ----------\n Below 768px the near-full-width sheets are the right call for a phone.\n On wider but still sub-desktop viewports (foldables, tablet portrait,\n desktop-mode tall windows) the same full-bleed sheet leaves content\n clustered at the left edge with a large dead zone on the right. Cap and\n center the modal sheets and the aionui bottom sheets instead. */\n@media (min-width: 768px) and (max-width: 1023px) {\n /* All modal dialogs: centered, never edge-to-edge. The settings sheet has\n a higher-specificity full-width rule above, so repeat its selector here\n to win; the generic export/other-modal rule is covered by the second\n selector. */\n [aria-modal=\"true\"]:has(> :first-child > :last-child > button):not(:has([role=\"navigation\"])):not(:has([class*=\"ZuhsRW\"])),\n [aria-modal=\"true\"]:not(:has(> :first-child > :last-child > button)) {\n left: 0 !important;\n right: 0 !important;\n margin-left: auto !important;\n margin-right: auto !important;\n width: min(calc(100vw - 32px), 720px) !important;\n max-width: min(calc(100vw - 32px), 720px) !important;\n }\n\n /* The dsh-web-ui explorer / preview bottom sheets: same treatment \u2014 keep\n the mobile bottom-sheet behavior, but stop them spanning the full width. */\n [data-aionui-explorer-col],\n [data-aionui-preview-col] {\n left: 0 !important;\n right: 0 !important;\n width: min(calc(100vw - 32px), 720px) !important;\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n /* Settings sections (e.g. Agent presets) often carry a desktop max-width\n (720px) that leaves a dead strip on the right once the sheet is capped to\n the same width; let them fill the sheet body instead. */\n [aria-modal=\"true\"] [class$=\"_section\"] {\n width: 100% !important;\n max-width: none !important;\n }\n}\n\n/* ---------- desktop: the mobile controls must never appear ---------- */\n\n@media (min-width: 1024px) {\n [data-mobile-nav=\"toggle\"],\n [data-mobile-nav=\"files\"],\n [data-mobile-nav=\"fab\"],\n [data-mobile-nav=\"backdrop\"],\n [data-mobile-nav=\"session-log\"],\n [data-mobile-nav=\"explorer\"],\n [data-mobile-nav=\"drawer-actions\"] {\n display: none !important;\n }\n}\n\n/* ---------- tablet standalone PWA: pay the safe area above 1023px ---------- */\n/* The gateway serves viewport-fit=cover to every non-desktop device (see\n coverViewport in lan-gate-server), phone-chrome only manages the meta at\n <=1023px, and every compensation rule in layout.css lives behind the same\n 1023px breakpoint and the data-mobile-nav frame marker MobileNavOverlay\n only sets there. A wide tablet's home-screen PWA \u2014 iPad landscape, the\n 12.9\"/13\" iPad portrait at exactly 1024, Android tablets \u2014 therefore\n painted under the status bar with nothing paying the inset: the top row\n of controls sat in the system area and was hard to tap.\n\n Anchor: the official AppFrame (ui-layout AppFrame.tsx) is the direct\n parent of the [data-shell-overlay] layer \u2014 the same element\n MobileNavOverlay's findFrame() resolves \u2014 and the frame already pads\n ITSELF for the Windows titlebar (padding-top: --dsh-windows-titlebar-height\n in AppFrame.module.css), so padding the frame is the host's own pattern\n for system bars.\n\n Structural no-op everywhere else, by construction:\n - display-mode: standalone matches only an installed PWA; desktop\n browsers report browser.\n - The Electron app never receives this stylesheet at all (the\n isDesktopShell gate in client/index.tsx) and never gets cover.\n - env() insets are hard 0 in every desktop browser, so even a browser\n that somehow matched the media query computes 0px padding; on iPads\n the bottom inset is 0 too (no home indicator) \u2014 the bottom line only\n ever pays out on Android tablets with a gesture/nav bar.\n box-sizing is load-bearing (the S2.1 lesson, see the frame rule in\n layout.css): the official frame is height:100% content-box, and padding\n without border-box would grow it past the viewport instead of reserving\n the strip. Pinned by scripts/check-tablet-safe-area.mjs. */\n@media (min-width: 1024px) and (display-mode: standalone) {\n :has(> [data-shell-overlay]) {\n box-sizing: border-box !important;\n padding-top: var(--mnav-sat) !important;\n padding-bottom: var(--mnav-sab) !important;\n }\n}\n";
|
|
2
2
|
//# sourceMappingURL=misc.css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.css.d.ts","sourceRoot":"","sources":["../../../../src/client/styles/misc.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"misc.css.d.ts","sourceRoot":"","sources":["../../../../src/client/styles/misc.css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,6iQAkKpB,CAAA"}
|
|
@@ -96,4 +96,68 @@ export declare function decideRemoteDrop(input: RemoteDropInput): RemoteDropDeci
|
|
|
96
96
|
* lastModified are preserved so the staged upload keeps its filename.
|
|
97
97
|
*/
|
|
98
98
|
export declare function rewrapFiles(files: Iterable<File>): File[];
|
|
99
|
+
/** Which entry an intake item arrived through. `drop` keeps the redispatch
|
|
100
|
+
* semantics of {@link decideRemoteDrop} (any file intervenes); `picker` /
|
|
101
|
+
* `paste` intervene only on the path-carrying non-image files. */
|
|
102
|
+
export type RemoteIntakeEntry = 'drop' | 'picker' | 'paste';
|
|
103
|
+
/** One intake item, reduced to what the decision needs. `hasPath` is the
|
|
104
|
+
* bridge's `pathFor(file) !== ''` — the same fact the host's zero-copy
|
|
105
|
+
* branch keys on; `isImage` is `file.type` starting with `image/` (the
|
|
106
|
+
* host's own image classification). A `paste` item with no file behind it
|
|
107
|
+
* never becomes a descriptor (the effect only collects `kind: 'file'`
|
|
108
|
+
* clipboard items), so plain-text paste arrives as an EMPTY list. */
|
|
109
|
+
export interface RemoteIntakeDescriptor {
|
|
110
|
+
entry: RemoteIntakeEntry;
|
|
111
|
+
isDirectory: boolean;
|
|
112
|
+
hasPath: boolean;
|
|
113
|
+
isImage: boolean;
|
|
114
|
+
}
|
|
115
|
+
/** Everything the intake decision may look at — the same three gates as
|
|
116
|
+
* {@link decideRemoteDrop}, injectable so no DOM is needed. */
|
|
117
|
+
export interface RemoteIntakeInput {
|
|
118
|
+
/** `__DSH_HOST_PATHS__` exists — the Electron preload's zero-copy bridge. */
|
|
119
|
+
hasHostPaths: boolean;
|
|
120
|
+
/** The currently open session id, or `undefined` when no signal. */
|
|
121
|
+
currentSessionId: string | undefined;
|
|
122
|
+
/** `event.isTrusted` — the re-entry guard for our redispatched events. */
|
|
123
|
+
trusted: boolean;
|
|
124
|
+
/** Descriptor per collected file. `undefined` means the caller could not
|
|
125
|
+
* even enumerate the items — with no inventory there is nothing safe to
|
|
126
|
+
* judge, so this passes through (today's behavior). */
|
|
127
|
+
items: readonly RemoteIntakeDescriptor[] | undefined;
|
|
128
|
+
}
|
|
129
|
+
export type RemoteIntakeAction = 'passthrough' | 'redirect' | 'block-directories';
|
|
130
|
+
/** Stable machine-readable why, one per branch, ordered by the gate sequence
|
|
131
|
+
* in {@link decideRemoteIntake}. */
|
|
132
|
+
export type RemoteIntakeReason = 'untrusted-event' | 'no-host-paths' | 'not-remote-session' | 'no-entry-api' | 'contains-directory' | 'no-files' | 'no-path-or-image-only' | 'remote-path-files';
|
|
133
|
+
export interface RemoteIntakeDecision {
|
|
134
|
+
action: RemoteIntakeAction;
|
|
135
|
+
reason: RemoteIntakeReason;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The three gates, then the intervention rule. The gates are decideRemoteDrop's
|
|
139
|
+
* verbatim (all must affirmatively pass — a missing signal reads as local and
|
|
140
|
+
* never intervenes); the rule after them:
|
|
141
|
+
* 1. `items === undefined` — no inventory, pass through (`no-entry-api`;
|
|
142
|
+
* deciding blind could eat a working flow);
|
|
143
|
+
* 2. any directory — `block-directories`, ahead of every redirect: a folder
|
|
144
|
+
* cannot be fixed by single-file upload, the whole intake is stopped with
|
|
145
|
+
* a toast (same semantics as the drop branch);
|
|
146
|
+
* 3. no items at all — passthrough (`no-files`; the plain-text paste shape);
|
|
147
|
+
* 4. otherwise — `redirect` when ANY item is a `drop` item (the frozen
|
|
148
|
+
* "any file intervenes" semantics) or carries a path while not being an
|
|
149
|
+
* image (the zero-copy bad branch — exactly what issue #49 broke on);
|
|
150
|
+
* `no-path-or-image-only` passthrough when none does.
|
|
151
|
+
*
|
|
152
|
+
* Drop-entry parity pin: a `drop` item's intervention semantics here are
|
|
153
|
+
* kept EQUIVALENT to `decideRemoteDrop` — same gates, directory rule and
|
|
154
|
+
* "any file intervenes" — with exactly ONE deliberate divergence: when
|
|
155
|
+
* `items === undefined`, `decideRemoteDrop` redispatches (a drop always has
|
|
156
|
+
* a Files payload worth re-shaping) while this function passes through
|
|
157
|
+
* (`no-entry-api` — an intake caller that cannot even enumerate its items
|
|
158
|
+
* must not be intercepted blind). If either function's gate sequence or
|
|
159
|
+
* drop-entry rule changes, update the other in the same commit; the truth
|
|
160
|
+
* tables in scripts/check-remote-drop.mjs pin both sides.
|
|
161
|
+
*/
|
|
162
|
+
export declare function decideRemoteIntake(input: RemoteIntakeInput): RemoteIntakeDecision;
|
|
99
163
|
//# sourceMappingURL=remote-drop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-drop.d.ts","sourceRoot":"","sources":["../../../src/client-data/remote-drop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH;;;qDAGqD;AACrD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjE;AAED;;;;wBAIwB;AACxB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B;2EACuE;IACvE,YAAY,EAAE,OAAO,CAAA;IACrB,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC;qCACiC;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB;;kEAE8D;IAC9D,KAAK,EAAE,SAAS,wBAAwB,EAAE,GAAG,SAAS,CAAA;CACvD;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,YAAY,GAAG,mBAAmB,CAAA;AAEjF;qBACqB;AACrB,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,oBAAoB,GACpB,UAAU,GACV,cAAc,CAAA;AAElB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAQ3E;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAEzD"}
|
|
1
|
+
{"version":3,"file":"remote-drop.d.ts","sourceRoot":"","sources":["../../../src/client-data/remote-drop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH;;;qDAGqD;AACrD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjE;AAED;;;;wBAIwB;AACxB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B;2EACuE;IACvE,YAAY,EAAE,OAAO,CAAA;IACrB,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC;qCACiC;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB;;kEAE8D;IAC9D,KAAK,EAAE,SAAS,wBAAwB,EAAE,GAAG,SAAS,CAAA;CACvD;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,YAAY,GAAG,mBAAmB,CAAA;AAEjF;qBACqB;AACrB,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,oBAAoB,GACpB,UAAU,GACV,cAAc,CAAA;AAElB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAQ3E;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAEzD;AAeD;;kEAEkE;AAClE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3D;;;;;qEAKqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,iBAAiB,CAAA;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;+DAC+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,YAAY,EAAE,OAAO,CAAA;IACrB,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAA;IAChB;;2DAEuD;IACvD,KAAK,EAAE,SAAS,sBAAsB,EAAE,GAAG,SAAS,CAAA;CACrD;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,UAAU,GAAG,mBAAmB,CAAA;AAEjF;oCACoC;AACpC,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,oBAAoB,GACpB,UAAU,GACV,uBAAuB,GACvB,mBAAmB,CAAA;AAEvB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,kBAAkB,CAAA;IAC1B,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,oBAAoB,CAWjF"}
|
|
@@ -86,6 +86,9 @@ export declare const CLIENT_CLAIM_ROUTE = "/_dsh/zen-remote/client/claim";
|
|
|
86
86
|
export declare const CLIENT_STATUS_ROUTE = "/_dsh/zen-remote/client/status";
|
|
87
87
|
/** T43: one immediate reconnect — answered 409 unless the client is offline. */
|
|
88
88
|
export declare const CLIENT_RECONNECT_ROUTE = "/_dsh/zen-remote/client/reconnect";
|
|
89
|
+
/** CU-4: the redacted diagnostic report (GET, both roles, machine-local only
|
|
90
|
+
* — a gateway-forwarded fetch is refused server-side). */
|
|
91
|
+
export declare const CLIENT_DEBUG_REPORT_ROUTE = "/_dsh/zen-remote/client/debug-report";
|
|
89
92
|
/** The lightweight client-facing config route (host half, both roles): the
|
|
90
93
|
* settings page's FALLBACK role probe (T17) — it registers wherever a
|
|
91
94
|
* webServer exists, and since T17 its body carries the effective `role`
|