page-harness 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -5
- package/README.zh-CN.md +23 -5
- package/THIRD_PARTY_LICENSES.md +31 -0
- package/dist/cli.js +574 -111
- package/dist/cli.js.map +1 -1
- package/dist/client/app/assets/history-Clt0CHe-.js +1 -0
- package/dist/client/app/assets/history-SejuExAu.css +1 -0
- package/dist/client/app/assets/{index.es-pLGXQA_f.js → index.es-BK9-mTsa.js} +1 -1
- package/dist/client/app/assets/{jspdf.es.min-OsUFBIXu.js → jspdf.es.min-Qzb6sJ_Q.js} +4 -4
- package/dist/client/app/assets/panel-B47-AaSQ.js +2 -0
- package/dist/client/app/assets/panel-CSA_nlud.css +1 -0
- package/dist/client/app/assets/{ws-B8OO397O.js → ws-DAWfQL6l.js} +21 -21
- package/dist/client/app/assets/{ws-BhXqMf5F.css → ws-DtkfUYSX.css} +1 -1
- package/dist/client/app/history.html +4 -4
- package/dist/client/app/panel.html +4 -4
- package/dist/client/page/live-overlay.js +6 -3
- package/dist/client/page/overlay.js +16 -13
- package/package.json +1 -1
- package/dist/client/app/assets/history-DTQ4t3U_.js +0 -1
- package/dist/client/app/assets/history-DfMi5ceT.css +0 -1
- package/dist/client/app/assets/panel-5OkTcFqg.css +0 -1
- package/dist/client/app/assets/panel-dt4wG7is.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font:var(--fs)/1.5 var(--font);-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}input,textarea,select{font:inherit;color:inherit}a{color:var(--accent)}[hidden]{display:none!important}.btn{height:var(--h);border:1px solid var(--line);border-radius:var(--r);background:var(--bg);white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:0 10px;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.btn:hover:not(:disabled){background:var(--bg2)}.btn:focus-visible,.input:focus-visible{box-shadow:var(--focus);outline:none}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg);font-weight:600}.btn.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn.danger{color:var(--err)}.btn.danger:hover:not(:disabled){background:var(--err-bg);border-color:color-mix(in srgb, var(--err) 35%, transparent)}.btn.ghost{color:var(--fg2);background:0 0;border-color:#0000}.btn.ghost:hover:not(:disabled){background:var(--bg3);color:var(--fg)}.btn.sm{height:var(--h-sm);font-size:var(--fs-sm);border-radius:var(--r-sm);padding:0 8px}.btn.icon{width:var(--h);padding:0}.btn.icon.sm{width:var(--h-sm)}.btn.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.btn svg{flex:none;width:15px;height:15px}.btn.sm svg{width:13px;height:13px}.input{height:var(--h);border:1px solid var(--line);border-radius:var(--r);background:var(--bg);outline:none;padding:0 8px;transition:border-color .12s,box-shadow .12s}.input:focus{border-color:var(--accent);box-shadow:var(--focus)}.input::placeholder,textarea::placeholder{color:var(--fg3)}select.input{padding-right:4px}.seg{border:1px solid var(--line);border-radius:var(--r);background:var(--bg2);flex:none;gap:2px;padding:2px;display:inline-flex}.seg .btn{height:calc(var(--h-sm) - 2px);border-radius:var(--r-sm);color:var(--fg2);background:0 0;border:0}.seg .btn:hover:not(:disabled){color:var(--fg);background:0 0}.seg .btn.on{background:var(--bg);color:var(--fg);box-shadow:var(--shadow-sm);font-weight:600}.switch{appearance:none;background:var(--line);cursor:pointer;border-radius:999px;flex:none;width:30px;height:18px;margin:0;transition:background .15s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.switch:checked{background:var(--accent)}.switch:checked:after{transform:translate(12px)}.switch:focus-visible{box-shadow:var(--focus);outline:none}.chip{background:var(--bg3);max-width:100%;height:22px;color:var(--fg2);font-size:var(--fs-sm);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;gap:4px;padding:0 8px;display:inline-flex;overflow:hidden}.muted{color:var(--fg2)}.faint{color:var(--fg3)}.mono{font-family:var(--mono)}.spacer{flex:1}.row{align-items:center;gap:6px;display:flex}.card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg)}.scroll{overflow:auto}.badge{background:var(--accent);min-width:16px;height:16px;color:var(--accent-fg);border-radius:999px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:700;display:inline-flex}.spin{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;flex:none;width:14px;height:14px;animation:.8s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line);background-clip:content-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--fg3)}::-webkit-scrollbar-track{background:0 0}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation-duration:.01ms!important}}.md{word-wrap:break-word;overflow-wrap:anywhere}.md>:first-child,.md>.mb:first-child>:first-child{margin-top:0}.md>:last-child,.md>.mb:last-child>:last-child{margin-bottom:0}.md p,.md ul,.md ol,.md pre,.md table,.md blockquote,.md .code-block{margin:0 0 8px}.md ul,.md ol{padding-left:20px}.md h1,.md h2,.md h3,.md h4{margin:12px 0 6px;line-height:1.3}.md h1{font-size:1.35em}.md h2{font-size:1.2em}.md h3{font-size:1.08em}.md{line-height:1.6}.md code{font-family:var(--mono);background:var(--code-bg);color:var(--accent-2);border-radius:4px;padding:1px 5px;font-size:12px}.md pre{border-radius:var(--r);background:var(--code-bg);border:1px solid var(--line);padding:10px 12px;overflow:auto}.md pre code{color:inherit}.md a{color:var(--accent-2);text-decoration:none}.md a:hover{text-decoration:underline}.md pre code{background:0 0;border:0;padding:0}.md blockquote{border-left:3px solid var(--line);color:var(--fg2);margin-left:0;padding-left:10px}.md table{border-collapse:collapse;display:block;overflow:auto}.md th,.md td{border:1px solid var(--line);padding:4px 8px}.md th{background:var(--bg2)}.md img{cursor:zoom-in;border-radius:6px;max-width:100%}.md hr{border:0;border-top:1px solid var(--line)}.code-block{border-radius:var(--r);background:var(--code-bg);border:1px solid var(--line);position:relative;overflow:hidden}.code-block pre{padding:10px 12px;overflow:auto;background:0 0!important;border:0!important;margin:0!important}.code-block .code-lang{font-size:var(--fs-xs);color:var(--fg3);position:absolute;top:4px;right:8px}.shiki,.shiki span{color:var(--shiki-light)}:root[data-theme=dark] .shiki,:root[data-theme=dark] .shiki span{color:var(--shiki-dark)}.md pre,.code-block pre{font:12px/1.5 var(--mono)}.lightbox{z-index:100;cursor:zoom-out;background:#000000bf;place-items:center;display:grid;position:fixed;inset:0}.lightbox img{background:#fff;border-radius:6px;max-width:94vw;max-height:94vh}.typing-dots{align-items:center;gap:3px;display:inline-flex}.typing-dots i{background:var(--agent);border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite both ph-bounce}.typing-dots i:nth-child(2){animation-delay:.16s}.typing-dots i:nth-child(3){animation-delay:.32s}@keyframes ph-bounce{0%,70%,to{opacity:.35;transform:translateY(0)}35%{opacity:1;transform:translateY(-4px)}}.shimmer{color:var(--accent-2);background:var(--grad);background-size:var(--grad-size);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;animation:3.5s ease-in-out infinite ph-shimmer}@keyframes ph-shimmer{0%,to{background-position:0%}50%{background-position:100%}}.caret{vertical-align:text-bottom;background:var(--accent);width:7px;height:1em;margin-left:2px;animation:.9s step-end infinite ph-caret;display:inline-block}@keyframes ph-caret{50%{opacity:0}}@keyframes ph-pulse{0%,to{opacity:.45}50%{opacity:1}}.pop{z-index:30;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg);box-shadow:var(--shadow);position:absolute}.ask[data-v-5d5b7c6b]{border-radius:var(--r-xl);border-color:color-mix(in srgb, var(--agent) 25%, var(--line));background:color-mix(in srgb, var(--agent) 5%, var(--bg));flex-direction:column;gap:10px;padding:12px;display:flex}.title[data-v-5d5b7c6b]{font-weight:600}.dots[data-v-5d5b7c6b]{gap:4px;display:flex}.dots span[data-v-5d5b7c6b]{background:var(--line);cursor:pointer;max-width:28px;height:4px;transition:background var(--dur);border-radius:999px;flex:1}.dots span.done[data-v-5d5b7c6b]{background:color-mix(in srgb, var(--accent) 45%, var(--line))}.dots span.cur[data-v-5d5b7c6b]{background:var(--accent)}.prompt[data-v-5d5b7c6b]{font-weight:600}.opts[data-v-5d5b7c6b]{flex-direction:column;gap:6px;display:flex}.opt[data-v-5d5b7c6b]{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg);cursor:pointer;transition:border-color var(--dur), background var(--dur);align-items:flex-start;gap:8px;padding:8px 10px;display:flex}.opt[data-v-5d5b7c6b]:hover{border-color:var(--line-strong)}.opt.on[data-v-5d5b7c6b]{border-color:var(--accent);background:color-mix(in srgb, var(--accent-soft) 60%, var(--bg))}.opt input[type=radio][data-v-5d5b7c6b],.opt input[type=checkbox][data-v-5d5b7c6b]{width:16px;height:16px;accent-color:var(--accent);flex:none;margin:1px 0 0}.ol[data-v-5d5b7c6b]{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px 8px;display:flex}.rec[data-v-5d5b7c6b]{font-size:var(--fs-xs);background:color-mix(in srgb, var(--accent) 15%, transparent);color:var(--accent-2);border-radius:999px;padding:0 7px;font-weight:500}.od[data-v-5d5b7c6b]{width:100%;color:var(--fg2);font-size:var(--fs-sm)}.opt.other[data-v-5d5b7c6b]{cursor:default;align-items:center}.opt.other .ol[data-v-5d5b7c6b]{flex:none}.opt.other .input[data-v-5d5b7c6b]{flex:1;height:26px}.field[data-v-5d5b7c6b]{flex-direction:column;gap:4px;display:flex}.field em[data-v-5d5b7c6b]{color:var(--err);font-style:normal}.ta[data-v-5d5b7c6b]{resize:vertical;height:auto;padding:6px 8px}.foot[data-v-5d5b7c6b]{align-items:center;gap:6px;display:flex}.sum[data-v-5d5b7c6b]{flex-direction:column;gap:6px;display:flex}.qa[data-v-5d5b7c6b]{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);padding:6px 10px}.qp[data-v-5d5b7c6b]{color:var(--fg3);font-size:var(--fs-xs)}.qv[data-v-5d5b7c6b]{font-weight:600}.live[data-v-1e552fb6]{border-radius:var(--r-xl);border-color:color-mix(in srgb, var(--accent) 30%, var(--line));background:color-mix(in srgb, var(--accent-soft) 55%, var(--bg));flex-direction:column;gap:8px;padding:10px 12px;display:flex}.live.compact[data-v-1e552fb6]{gap:4px;max-width:360px;padding:7px 12px}.live.agent[data-v-1e552fb6]{animation:.18s cubic-bezier(.22,1,.36,1) live-in-1e552fb6}@keyframes live-in-1e552fb6{0%{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:reduce){.live.agent[data-v-1e552fb6]{animation:none}}.top[data-v-1e552fb6]{align-items:center;gap:6px;display:flex}.ic[data-v-1e552fb6]{width:15px;height:15px;color:var(--accent-2);flex:none}.title[data-v-1e552fb6]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.st[data-v-1e552fb6]{height:20px;font-size:var(--fs-xs);background:var(--bg2);color:var(--fg2);border-radius:999px;align-items:center;gap:4px;padding:0 8px;font-weight:500;display:inline-flex}.st .spin[data-v-1e552fb6]{border-width:1.5px;width:10px;height:10px}.st.busy[data-v-1e552fb6]{color:var(--accent-2)}.ready .st[data-v-1e552fb6]{background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--accent-2)}.failed .st[data-v-1e552fb6]{background:var(--err-bg);color:var(--err)}.accepted .st[data-v-1e552fb6]{background:var(--ok-bg);color:var(--ok)}.prompt[data-v-1e552fb6]{font-size:var(--fs-sm)}.err[data-v-1e552fb6]{font-size:var(--fs-sm);color:var(--err)}.vars[data-v-1e552fb6]{flex-wrap:wrap;gap:4px;display:flex}.chip.acc[data-v-1e552fb6]{background:var(--accent);color:var(--accent-fg)}.acts[data-v-1e552fb6]{align-items:center;gap:6px;display:flex}.acts[data-v-1e552fb6]:empty{display:none}.mb[data-v-36991c76]{display:contents}.streaming>.mb[data-v-36991c76]:last-child>:last-child:after,.streaming[data-v-36991c76]:empty:after{content:"";vertical-align:text-bottom;background:var(--accent);width:7px;height:1em;margin-left:2px;animation:.9s step-end infinite ph-caret;display:inline-block}.ts[data-v-7dbe7b9b]{align-items:center;gap:6px;min-width:0;display:inline-flex}.ic[data-v-7dbe7b9b]{width:13px;height:13px;color:var(--accent-2);flex:none}[data-state=generating] .ic[data-v-7dbe7b9b]{animation:1.4s ease-in-out infinite ph-pulse}[data-state=interrupted] .ic[data-v-7dbe7b9b]{color:var(--warn)}.ok[data-v-7dbe7b9b]{width:12px;height:12px;color:var(--ok)}.code-view[data-v-1a55757b]{font:12px/1.55 var(--mono)}.code-view pre[data-v-1a55757b],.code-view[data-v-1a55757b] pre{white-space:pre-wrap;word-break:break-word;margin:0;padding:12px;background:0 0!important}.tool+.tool[data-v-594c2211]{border-top:1px solid var(--line2)}.head[data-v-594c2211]{text-align:left;width:100%;height:28px;font-size:var(--fs-sm);background:0 0;border:0;align-items:center;gap:8px;padding:0 10px;display:flex}.head[data-v-594c2211]:hover{background:var(--bg2)}.head .spin[data-v-594c2211]{border-width:1.5px;width:12px;height:12px}.ic[data-v-594c2211]{width:13px;height:13px;color:var(--fg3);flex:none}.error .ic[data-v-594c2211]{color:var(--err)}.name[data-v-594c2211]{flex:none;font-weight:600}.sum[data-v-594c2211]{color:var(--fg3);font-size:var(--fs-xs);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.chev[data-v-594c2211]{width:13px;height:13px;color:var(--fg3);transition:transform var(--dur);flex:none}.chev.open[data-v-594c2211]{transform:rotate(180deg)}.body[data-v-594c2211]{border-top:1px dashed var(--line);background:var(--base)}.sec[data-v-594c2211]{padding:6px 10px}.sec+.sec[data-v-594c2211]{border-top:1px dashed var(--line)}.lbl[data-v-594c2211]{font-size:var(--fs-xs);color:var(--fg3);text-transform:uppercase;letter-spacing:.04em}.sec[data-v-594c2211] .code-view pre{max-height:240px;padding:4px 0;overflow:auto}.out[data-v-594c2211]{font:12px/1.5 var(--mono);white-space:pre-wrap;word-break:break-word;max-height:280px;margin:4px 0 0;overflow:auto}.tools[data-v-f67aaedd]{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);align-self:stretch;overflow:hidden}.tools.failed[data-v-f67aaedd]{border-color:color-mix(in srgb, var(--err) 35%, var(--line))}.head[data-v-f67aaedd]{text-align:left;width:100%;height:28px;color:var(--fg2);font-size:var(--fs-sm);background:0 0;border:0;align-items:center;gap:6px;padding:0 10px;display:flex}.head[data-v-f67aaedd]:hover{color:var(--fg);background:var(--bg2)}.head .spin[data-v-f67aaedd]{border-width:1.5px;width:12px;height:12px}.ic[data-v-f67aaedd]{flex:none;width:13px;height:13px}.ic.ok[data-v-f67aaedd]{color:var(--ok)}.ic.err[data-v-f67aaedd]{color:var(--err)}.count[data-v-f67aaedd]{flex:none;font-weight:500}.names[data-v-f67aaedd]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--fg3);font-size:var(--fs-xs);flex:1;overflow:hidden}.chev[data-v-f67aaedd]{width:13px;height:13px;color:var(--fg3);transition:transform var(--dur);flex:none}.open .chev[data-v-f67aaedd]{transform:rotate(180deg)}.list[data-v-f67aaedd]{border-top:1px solid var(--line)}.turn[data-v-d25ee966]{flex-direction:column;gap:12px;padding:8px 14px;display:flex}.row[data-v-d25ee966]{align-items:flex-start;gap:10px;display:flex}.row.user[data-v-d25ee966]{flex-direction:row-reverse}.av[data-v-d25ee966]{-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;place-items:center;width:28px;height:28px;font-size:11px;font-weight:600;display:grid}.av.bot[data-v-d25ee966]{background:var(--agent-soft);color:var(--agent)}.av.bot svg[data-v-d25ee966]{width:15px;height:15px}.av.me[data-v-d25ee966]{background:var(--accent-soft);color:var(--accent-2)}.col[data-v-d25ee966]{flex-direction:column;gap:6px;min-width:0;display:flex}.user .col[data-v-d25ee966]{align-items:flex-end;max-width:80%}.agent .col[data-v-d25ee966]{flex:1}.bubble[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid var(--user-line);background:var(--user-bg);flex-direction:column;gap:6px;padding:8px 12px;line-height:1.6;display:flex}.text[data-v-d25ee966]{white-space:pre-wrap;word-break:break-word}.chips[data-v-d25ee966]{flex-wrap:wrap;gap:4px;display:flex}.chips .chip[data-v-d25ee966]{background:var(--bg);border:1px solid var(--line);max-width:240px}.chip svg[data-v-d25ee966]{flex:none;width:12px;height:12px}.atts[data-v-d25ee966]{flex-wrap:wrap;gap:6px;display:flex}.thumb[data-v-d25ee966]{object-fit:cover;border-radius:var(--r);border:1px solid var(--line);cursor:zoom-in;background:var(--bg);width:72px;height:72px}.file[data-v-d25ee966]{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg);font-size:var(--fs-sm);color:var(--fg);align-items:center;gap:4px;padding:4px 8px;text-decoration:none;display:inline-flex}.file svg[data-v-d25ee966]{width:14px;height:14px}.msg[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg2);align-self:flex-start;max-width:100%;padding:8px 12px}.busy[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg2);align-self:flex-start;padding:8px 12px}.thinking[data-v-d25ee966]{border:1px solid var(--line);border-radius:var(--r);background:color-mix(in srgb, var(--base) 60%, transparent);color:var(--fg3);font-size:11.5px}.thinking summary[data-v-d25ee966]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:6px 10px;list-style:none;display:flex}.thinking summary[data-v-d25ee966]::-webkit-details-marker{display:none}.thinking summary[data-v-d25ee966]:hover{color:var(--fg2)}.thinking .chev[data-v-d25ee966]{width:13px;height:13px;transition:transform var(--dur);margin-left:auto}.thinking[open] .chev[data-v-d25ee966]{transform:rotate(180deg)}.think-body[data-v-d25ee966]{white-space:pre-wrap;overflow-wrap:anywhere;font:11.5px/1.65 var(--mono);border-top:1px dashed var(--line);max-height:260px;padding:6px 10px 8px;overflow:auto}.notice[data-v-d25ee966]{font-size:var(--fs-sm);border-radius:var(--r);background:var(--bg2);color:var(--fg2);align-items:flex-start;gap:6px;padding:6px 10px;display:flex}.notice svg[data-v-d25ee966]{flex:none;width:14px;height:14px;margin-top:2px}.notice.warn[data-v-d25ee966]{background:var(--warn-bg);color:var(--warn)}.err-box[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid color-mix(in srgb, var(--err) 35%, transparent);background:var(--err-bg);gap:8px;padding:8px 12px;display:flex}.err-box>svg[data-v-d25ee966]{width:16px;height:16px;color:var(--err);flex:none;margin-top:2px}.err-body[data-v-d25ee966]{min-width:0}.err-title[data-v-d25ee966]{color:var(--err);font-weight:600}.err-msg[data-v-d25ee966]{font-size:var(--fs-sm);color:var(--fg2);overflow-wrap:anywhere;white-space:pre-wrap;margin-top:2px}.indicator[data-v-d25ee966]{color:var(--fg3);font-size:var(--fs-sm);align-items:center;gap:8px;min-height:20px;display:flex}.empty-reply[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid color-mix(in srgb, var(--err) 35%, transparent);background:var(--err-bg);color:var(--err);font-size:var(--fs-sm);align-items:center;gap:8px;padding:8px 12px;display:flex}.empty-reply>svg[data-v-d25ee966]{flex:none;width:16px;height:16px}.empty-reply span[data-v-d25ee966]{flex:1}.arts[data-v-d25ee966]{flex-wrap:wrap;gap:4px;display:flex}.chip.art[data-v-d25ee966]{border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);cursor:pointer;color:var(--accent-2);background:var(--accent-soft)}.chip.art[data-v-d25ee966]:hover{border-color:var(--accent)}.files-head[data-v-d25ee966]{color:var(--fg2);font-size:var(--fs-sm);background:0 0;border:0;align-items:center;gap:4px;padding:0;display:inline-flex}.files-head[data-v-d25ee966]:hover{color:var(--fg)}.files-head svg[data-v-d25ee966]{width:13px;height:13px}.files ul[data-v-d25ee966]{font-size:var(--fs-sm);color:var(--fg2);margin:4px 0 0;padding-left:18px}.foot[data-v-d25ee966]{font-size:var(--fs-xs);color:var(--fg3);align-items:center;gap:6px;min-height:20px;display:flex}.st[data-v-d25ee966]{color:var(--fg2);align-items:center;gap:3px;display:inline-flex}.st svg[data-v-d25ee966]{color:currentColor;width:12px;height:12px}.st.done svg[data-v-d25ee966]{color:var(--ok)}.st.error[data-v-d25ee966]{color:var(--err)}.st.cancelled[data-v-d25ee966],.st.interrupted[data-v-d25ee966]{color:var(--warn)}
|
|
1
|
+
@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/__ph/app/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/__ph/app/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);color:var(--fg);font:var(--fs)/1.5 var(--font);-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}input,textarea,select{font:inherit;color:inherit}a{color:var(--accent)}[hidden]{display:none!important}.btn{height:var(--h);border:1px solid var(--line);border-radius:var(--r);background:var(--bg);white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:0 10px;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.btn:hover:not(:disabled){background:var(--bg2)}.btn:focus-visible,.input:focus-visible{box-shadow:var(--focus);outline:none}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg);font-weight:600}.btn.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn.danger{color:var(--err)}.btn.danger:hover:not(:disabled){background:var(--err-bg);border-color:color-mix(in srgb, var(--err) 35%, transparent)}.btn.ghost{color:var(--fg2);background:0 0;border-color:#0000}.btn.ghost:hover:not(:disabled){background:var(--bg3);color:var(--fg)}.btn.sm{height:var(--h-sm);font-size:var(--fs-sm);border-radius:var(--r-sm);padding:0 8px}.btn.icon{width:var(--h);padding:0}.btn.icon.sm{width:var(--h-sm)}.btn.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.btn svg{flex:none;width:15px;height:15px}.btn.sm svg{width:13px;height:13px}.input{height:var(--h);border:1px solid var(--line);border-radius:var(--r);background:var(--bg);outline:none;padding:0 8px;transition:border-color .12s,box-shadow .12s}.input:focus{border-color:var(--accent);box-shadow:var(--focus)}.input::placeholder,textarea::placeholder{color:var(--fg3)}select.input{padding-right:4px}.seg{border:1px solid var(--line);border-radius:var(--r);background:var(--bg2);flex:none;gap:2px;padding:2px;display:inline-flex}.seg .btn{height:calc(var(--h-sm) - 2px);border-radius:var(--r-sm);color:var(--fg2);background:0 0;border:0}.seg .btn:hover:not(:disabled){color:var(--fg);background:0 0}.seg .btn.on{background:var(--bg);color:var(--fg);box-shadow:var(--shadow-sm);font-weight:600}.switch{appearance:none;background:var(--line);cursor:pointer;border-radius:999px;flex:none;width:30px;height:18px;margin:0;transition:background .15s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.switch:checked{background:var(--accent)}.switch:checked:after{transform:translate(12px)}.switch:focus-visible{box-shadow:var(--focus);outline:none}.chip{background:var(--bg3);max-width:100%;height:22px;color:var(--fg2);font-size:var(--fs-sm);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;align-items:center;gap:4px;padding:0 8px;display:inline-flex;overflow:hidden}.muted{color:var(--fg2)}.faint{color:var(--fg3)}.mono{font-family:var(--mono)}.spacer{flex:1}.row{align-items:center;gap:6px;display:flex}.card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg)}.scroll{overflow:auto}.badge{background:var(--accent);min-width:16px;height:16px;color:var(--accent-fg);border-radius:999px;justify-content:center;align-items:center;padding:0 4px;font-size:10px;font-weight:700;display:inline-flex}.spin{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;flex:none;width:14px;height:14px;animation:.8s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line);background-clip:content-box;border:3px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--fg3)}::-webkit-scrollbar-track{background:0 0}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation-duration:.01ms!important}}.md{word-wrap:break-word;overflow-wrap:anywhere}.md>:first-child,.md>.mb:first-child>:first-child{margin-top:0}.md>:last-child,.md>.mb:last-child>:last-child{margin-bottom:0}.md p,.md ul,.md ol,.md pre,.md table,.md blockquote,.md .code-block{margin:0 0 8px}.md ul,.md ol{padding-left:20px}.md h1,.md h2,.md h3,.md h4{margin:12px 0 6px;line-height:1.3}.md h1{font-size:1.35em}.md h2{font-size:1.2em}.md h3{font-size:1.08em}.md{line-height:1.6}.md code{font-family:var(--mono);background:var(--code-bg);color:var(--accent-2);border-radius:4px;padding:1px 5px;font-size:12px}.md pre{border-radius:var(--r);background:var(--code-bg);border:1px solid var(--line);padding:10px 12px;overflow:auto}.md pre code{color:inherit}.md a{color:var(--accent-2);text-decoration:none}.md a:hover{text-decoration:underline}.md pre code{background:0 0;border:0;padding:0}.md blockquote{border-left:3px solid var(--line);color:var(--fg2);margin-left:0;padding-left:10px}.md table{border-collapse:collapse;display:block;overflow:auto}.md th,.md td{border:1px solid var(--line);padding:4px 8px}.md th{background:var(--bg2)}.md img{cursor:zoom-in;border-radius:6px;max-width:100%}.md hr{border:0;border-top:1px solid var(--line)}.code-block{border-radius:var(--r);background:var(--code-bg);border:1px solid var(--line);position:relative;overflow:hidden}.code-block pre{padding:10px 12px;overflow:auto;background:0 0!important;border:0!important;margin:0!important}.code-block .code-lang{font-size:var(--fs-xs);color:var(--fg3);position:absolute;top:4px;right:8px}.shiki,.shiki span{color:var(--shiki-light)}:root[data-theme=dark] .shiki,:root[data-theme=dark] .shiki span{color:var(--shiki-dark)}.md pre,.code-block pre{font:12px/1.5 var(--mono)}.lightbox{z-index:100;cursor:zoom-out;background:#000000bf;place-items:center;display:grid;position:fixed;inset:0}.lightbox img{background:#fff;border-radius:6px;max-width:94vw;max-height:94vh}.typing-dots{align-items:center;gap:3px;display:inline-flex}.typing-dots i{background:var(--agent);border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite both ph-bounce}.typing-dots i:nth-child(2){animation-delay:.16s}.typing-dots i:nth-child(3){animation-delay:.32s}@keyframes ph-bounce{0%,70%,to{opacity:.35;transform:translateY(0)}35%{opacity:1;transform:translateY(-4px)}}.shimmer{color:var(--accent-2);background:var(--grad);background-size:var(--grad-size);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;animation:3.5s ease-in-out infinite ph-shimmer}@keyframes ph-shimmer{0%,to{background-position:0%}50%{background-position:100%}}.caret{vertical-align:text-bottom;background:var(--accent);width:7px;height:1em;margin-left:2px;animation:.9s step-end infinite ph-caret;display:inline-block}@keyframes ph-caret{50%{opacity:0}}@keyframes ph-pulse{0%,to{opacity:.45}50%{opacity:1}}.pop{z-index:30;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg);box-shadow:var(--shadow);position:absolute}.ab[data-v-f49720be]{color:var(--ab);background:color-mix(in srgb, var(--ab) 15%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--ab) 22%, transparent);border-radius:5px;flex:none;place-items:center;display:inline-grid}.ab.xs[data-v-f49720be]{border-radius:4px;width:14px;height:14px}.ab.xs svg[data-v-f49720be]{width:10px;height:10px}.ab.sm[data-v-f49720be]{width:18px;height:18px}.ab.sm svg[data-v-f49720be]{width:12px;height:12px}.ab.md[data-v-f49720be]{border-radius:6px;width:22px;height:22px}.ab.md svg[data-v-f49720be]{width:14px;height:14px}.ab.off[data-v-f49720be]{color:var(--fg3);background:var(--bg3);box-shadow:none}.ab.xs svg.logo[data-v-f49720be]{width:11px;height:11px}.ab.sm svg.logo[data-v-f49720be]{width:13px;height:13px}.ab.md svg.logo[data-v-f49720be]{width:16px;height:16px}.ask[data-v-5d5b7c6b]{border-radius:var(--r-xl);border-color:color-mix(in srgb, var(--agent) 25%, var(--line));background:color-mix(in srgb, var(--agent) 5%, var(--bg));flex-direction:column;gap:10px;padding:12px;display:flex}.title[data-v-5d5b7c6b]{font-weight:600}.dots[data-v-5d5b7c6b]{gap:4px;display:flex}.dots span[data-v-5d5b7c6b]{background:var(--line);cursor:pointer;max-width:28px;height:4px;transition:background var(--dur);border-radius:999px;flex:1}.dots span.done[data-v-5d5b7c6b]{background:color-mix(in srgb, var(--accent) 45%, var(--line))}.dots span.cur[data-v-5d5b7c6b]{background:var(--accent)}.prompt[data-v-5d5b7c6b]{font-weight:600}.opts[data-v-5d5b7c6b]{flex-direction:column;gap:6px;display:flex}.opt[data-v-5d5b7c6b]{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg);cursor:pointer;transition:border-color var(--dur), background var(--dur);align-items:flex-start;gap:8px;padding:8px 10px;display:flex}.opt[data-v-5d5b7c6b]:hover{border-color:var(--line-strong)}.opt.on[data-v-5d5b7c6b]{border-color:var(--accent);background:color-mix(in srgb, var(--accent-soft) 60%, var(--bg))}.opt input[type=radio][data-v-5d5b7c6b],.opt input[type=checkbox][data-v-5d5b7c6b]{width:16px;height:16px;accent-color:var(--accent);flex:none;margin:1px 0 0}.ol[data-v-5d5b7c6b]{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px 8px;display:flex}.rec[data-v-5d5b7c6b]{font-size:var(--fs-xs);background:color-mix(in srgb, var(--accent) 15%, transparent);color:var(--accent-2);border-radius:999px;padding:0 7px;font-weight:500}.od[data-v-5d5b7c6b]{width:100%;color:var(--fg2);font-size:var(--fs-sm)}.opt.other[data-v-5d5b7c6b]{cursor:default;align-items:center}.opt.other .ol[data-v-5d5b7c6b]{flex:none}.opt.other .input[data-v-5d5b7c6b]{flex:1;height:26px}.field[data-v-5d5b7c6b]{flex-direction:column;gap:4px;display:flex}.field em[data-v-5d5b7c6b]{color:var(--err);font-style:normal}.ta[data-v-5d5b7c6b]{resize:vertical;height:auto;padding:6px 8px}.foot[data-v-5d5b7c6b]{align-items:center;gap:6px;display:flex}.sum[data-v-5d5b7c6b]{flex-direction:column;gap:6px;display:flex}.qa[data-v-5d5b7c6b]{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);padding:6px 10px}.qp[data-v-5d5b7c6b]{color:var(--fg3);font-size:var(--fs-xs)}.qv[data-v-5d5b7c6b]{font-weight:600}.live[data-v-1e552fb6]{border-radius:var(--r-xl);border-color:color-mix(in srgb, var(--accent) 30%, var(--line));background:color-mix(in srgb, var(--accent-soft) 55%, var(--bg));flex-direction:column;gap:8px;padding:10px 12px;display:flex}.live.compact[data-v-1e552fb6]{gap:4px;max-width:360px;padding:7px 12px}.live.agent[data-v-1e552fb6]{animation:.18s cubic-bezier(.22,1,.36,1) live-in-1e552fb6}@keyframes live-in-1e552fb6{0%{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:reduce){.live.agent[data-v-1e552fb6]{animation:none}}.top[data-v-1e552fb6]{align-items:center;gap:6px;display:flex}.ic[data-v-1e552fb6]{width:15px;height:15px;color:var(--accent-2);flex:none}.title[data-v-1e552fb6]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.st[data-v-1e552fb6]{height:20px;font-size:var(--fs-xs);background:var(--bg2);color:var(--fg2);border-radius:999px;align-items:center;gap:4px;padding:0 8px;font-weight:500;display:inline-flex}.st .spin[data-v-1e552fb6]{border-width:1.5px;width:10px;height:10px}.st.busy[data-v-1e552fb6]{color:var(--accent-2)}.ready .st[data-v-1e552fb6]{background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--accent-2)}.failed .st[data-v-1e552fb6]{background:var(--err-bg);color:var(--err)}.accepted .st[data-v-1e552fb6]{background:var(--ok-bg);color:var(--ok)}.prompt[data-v-1e552fb6]{font-size:var(--fs-sm)}.err[data-v-1e552fb6]{font-size:var(--fs-sm);color:var(--err)}.vars[data-v-1e552fb6]{flex-wrap:wrap;gap:4px;display:flex}.chip.acc[data-v-1e552fb6]{background:var(--accent);color:var(--accent-fg)}.acts[data-v-1e552fb6]{align-items:center;gap:6px;display:flex}.acts[data-v-1e552fb6]:empty{display:none}.mb[data-v-36991c76]{display:contents}.streaming>.mb[data-v-36991c76]:last-child>:last-child:after,.streaming[data-v-36991c76]:empty:after{content:"";vertical-align:text-bottom;background:var(--accent);width:7px;height:1em;margin-left:2px;animation:.9s step-end infinite ph-caret;display:inline-block}.ts[data-v-7dbe7b9b]{align-items:center;gap:6px;min-width:0;display:inline-flex}.ic[data-v-7dbe7b9b]{width:13px;height:13px;color:var(--accent-2);flex:none}[data-state=generating] .ic[data-v-7dbe7b9b]{animation:1.4s ease-in-out infinite ph-pulse}[data-state=interrupted] .ic[data-v-7dbe7b9b]{color:var(--warn)}.ok[data-v-7dbe7b9b]{width:12px;height:12px;color:var(--ok)}.code-view[data-v-1a55757b]{font:12px/1.55 var(--mono)}.code-view pre[data-v-1a55757b],.code-view[data-v-1a55757b] pre{white-space:pre-wrap;word-break:break-word;margin:0;padding:12px;background:0 0!important}.tool+.tool[data-v-862deeb1]{border-top:1px solid var(--line2)}.head[data-v-862deeb1]{text-align:left;width:100%;height:28px;font-size:var(--fs-sm);background:0 0;border:0;align-items:center;gap:8px;padding:0 10px;display:flex}.head[data-v-862deeb1]:hover{background:var(--bg2)}.head .spin[data-v-862deeb1]{border-width:1.5px;width:12px;height:12px}.ic[data-v-862deeb1]{width:13px;height:13px;color:var(--fg3);flex:none}.error .ic[data-v-862deeb1]{color:var(--err)}.name[data-v-862deeb1]{flex:none;font-weight:600}.sum[data-v-862deeb1]{color:var(--fg3);font-size:var(--fs-xs);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.chev[data-v-862deeb1]{width:13px;height:13px;color:var(--fg3);transition:transform var(--dur);flex:none}.chev.open[data-v-862deeb1]{transform:rotate(180deg)}.body[data-v-862deeb1]{border-top:1px dashed var(--line);background:var(--base)}.sec[data-v-862deeb1]{padding:6px 10px}.sec+.sec[data-v-862deeb1]{border-top:1px dashed var(--line)}.lbl[data-v-862deeb1]{font-size:var(--fs-xs);color:var(--fg3);text-transform:uppercase;letter-spacing:.04em}.sec[data-v-862deeb1] .code-view pre{max-height:240px;padding:4px 0;overflow:auto}.out[data-v-862deeb1]{font:12px/1.5 var(--mono);white-space:pre-wrap;word-break:break-word;max-height:280px;margin:4px 0 0;overflow:auto}.tools[data-v-f67aaedd]{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);align-self:stretch;overflow:hidden}.tools.failed[data-v-f67aaedd]{border-color:color-mix(in srgb, var(--err) 35%, var(--line))}.head[data-v-f67aaedd]{text-align:left;width:100%;height:28px;color:var(--fg2);font-size:var(--fs-sm);background:0 0;border:0;align-items:center;gap:6px;padding:0 10px;display:flex}.head[data-v-f67aaedd]:hover{color:var(--fg);background:var(--bg2)}.head .spin[data-v-f67aaedd]{border-width:1.5px;width:12px;height:12px}.ic[data-v-f67aaedd]{flex:none;width:13px;height:13px}.ic.ok[data-v-f67aaedd]{color:var(--ok)}.ic.err[data-v-f67aaedd]{color:var(--err)}.count[data-v-f67aaedd]{flex:none;font-weight:500}.names[data-v-f67aaedd]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--fg3);font-size:var(--fs-xs);flex:1;overflow:hidden}.chev[data-v-f67aaedd]{width:13px;height:13px;color:var(--fg3);transition:transform var(--dur);flex:none}.open .chev[data-v-f67aaedd]{transform:rotate(180deg)}.list[data-v-f67aaedd]{border-top:1px solid var(--line)}.turn[data-v-d25ee966]{flex-direction:column;gap:12px;padding:8px 14px;display:flex}.row[data-v-d25ee966]{align-items:flex-start;gap:10px;display:flex}.row.user[data-v-d25ee966]{flex-direction:row-reverse}.av[data-v-d25ee966]{-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;place-items:center;width:28px;height:28px;font-size:11px;font-weight:600;display:grid}.av.bot[data-v-d25ee966]{background:var(--agent-soft);color:var(--agent)}.av.bot svg[data-v-d25ee966]{width:15px;height:15px}.av.me[data-v-d25ee966]{background:var(--accent-soft);color:var(--accent-2)}.col[data-v-d25ee966]{flex-direction:column;gap:6px;min-width:0;display:flex}.user .col[data-v-d25ee966]{align-items:flex-end;max-width:80%}.agent .col[data-v-d25ee966]{flex:1}.bubble[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid var(--user-line);background:var(--user-bg);flex-direction:column;gap:6px;padding:8px 12px;line-height:1.6;display:flex}.text[data-v-d25ee966]{white-space:pre-wrap;word-break:break-word}.chips[data-v-d25ee966]{flex-wrap:wrap;gap:4px;display:flex}.chips .chip[data-v-d25ee966]{background:var(--bg);border:1px solid var(--line);max-width:240px}.chip svg[data-v-d25ee966]{flex:none;width:12px;height:12px}.atts[data-v-d25ee966]{flex-wrap:wrap;gap:6px;display:flex}.thumb[data-v-d25ee966]{object-fit:cover;border-radius:var(--r);border:1px solid var(--line);cursor:zoom-in;background:var(--bg);width:72px;height:72px}.file[data-v-d25ee966]{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg);font-size:var(--fs-sm);color:var(--fg);align-items:center;gap:4px;padding:4px 8px;text-decoration:none;display:inline-flex}.file svg[data-v-d25ee966]{width:14px;height:14px}.msg[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg2);align-self:flex-start;max-width:100%;padding:8px 12px}.busy[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid var(--line);background:var(--bg2);align-self:flex-start;padding:8px 12px}.thinking[data-v-d25ee966]{border:1px solid var(--line);border-radius:var(--r);background:color-mix(in srgb, var(--base) 60%, transparent);color:var(--fg3);font-size:11.5px}.thinking summary[data-v-d25ee966]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:6px 10px;list-style:none;display:flex}.thinking summary[data-v-d25ee966]::-webkit-details-marker{display:none}.thinking summary[data-v-d25ee966]:hover{color:var(--fg2)}.thinking .chev[data-v-d25ee966]{width:13px;height:13px;transition:transform var(--dur);margin-left:auto}.thinking[open] .chev[data-v-d25ee966]{transform:rotate(180deg)}.think-body[data-v-d25ee966]{white-space:pre-wrap;overflow-wrap:anywhere;font:11.5px/1.65 var(--mono);border-top:1px dashed var(--line);max-height:260px;padding:6px 10px 8px;overflow:auto}.notice[data-v-d25ee966]{font-size:var(--fs-sm);border-radius:var(--r);background:var(--bg2);color:var(--fg2);align-items:flex-start;gap:6px;padding:6px 10px;display:flex}.notice svg[data-v-d25ee966]{flex:none;width:14px;height:14px;margin-top:2px}.notice.warn[data-v-d25ee966]{background:var(--warn-bg);color:var(--warn)}.err-box[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid color-mix(in srgb, var(--err) 35%, transparent);background:var(--err-bg);gap:8px;padding:8px 12px;display:flex}.err-box>svg[data-v-d25ee966]{width:16px;height:16px;color:var(--err);flex:none;margin-top:2px}.err-body[data-v-d25ee966]{min-width:0}.err-title[data-v-d25ee966]{color:var(--err);font-weight:600}.err-msg[data-v-d25ee966]{font-size:var(--fs-sm);color:var(--fg2);overflow-wrap:anywhere;white-space:pre-wrap;margin-top:2px}.indicator[data-v-d25ee966]{color:var(--fg3);font-size:var(--fs-sm);align-items:center;gap:8px;min-height:20px;display:flex}.empty-reply[data-v-d25ee966]{border-radius:var(--r-lg);border:1px solid color-mix(in srgb, var(--err) 35%, transparent);background:var(--err-bg);color:var(--err);font-size:var(--fs-sm);align-items:center;gap:8px;padding:8px 12px;display:flex}.empty-reply>svg[data-v-d25ee966]{flex:none;width:16px;height:16px}.empty-reply span[data-v-d25ee966]{flex:1}.arts[data-v-d25ee966]{flex-wrap:wrap;gap:4px;display:flex}.chip.art[data-v-d25ee966]{border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);cursor:pointer;color:var(--accent-2);background:var(--accent-soft)}.chip.art[data-v-d25ee966]:hover{border-color:var(--accent)}.files-head[data-v-d25ee966]{color:var(--fg2);font-size:var(--fs-sm);background:0 0;border:0;align-items:center;gap:4px;padding:0;display:inline-flex}.files-head[data-v-d25ee966]:hover{color:var(--fg)}.files-head svg[data-v-d25ee966]{width:13px;height:13px}.files ul[data-v-d25ee966]{font-size:var(--fs-sm);color:var(--fg2);margin:4px 0 0;padding-left:18px}.foot[data-v-d25ee966]{font-size:var(--fs-xs);color:var(--fg3);align-items:center;gap:6px;min-height:20px;display:flex}.st[data-v-d25ee966]{color:var(--fg2);align-items:center;gap:3px;display:inline-flex}.st svg[data-v-d25ee966]{color:currentColor;width:12px;height:12px}.st.done svg[data-v-d25ee966]{color:var(--ok)}.st.error[data-v-d25ee966]{color:var(--err)}.st.cancelled[data-v-d25ee966],.st.interrupted[data-v-d25ee966]{color:var(--warn)}
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<meta name="referrer" content="no-referrer" />
|
|
7
7
|
<title>Page Harness · History</title>
|
|
8
|
-
<script type="module" crossorigin src="/__ph/app/assets/history-
|
|
8
|
+
<script type="module" crossorigin src="/__ph/app/assets/history-Clt0CHe-.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/__ph/app/assets/rolldown-runtime-hePW80VL.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/__ph/app/assets/ws-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/__ph/app/assets/ws-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/__ph/app/assets/history-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/__ph/app/assets/ws-DAWfQL6l.js">
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/__ph/app/assets/ws-DtkfUYSX.css">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/__ph/app/assets/history-SejuExAu.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="app"></div>
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<meta name="referrer" content="no-referrer" />
|
|
7
7
|
<title>Page Harness</title>
|
|
8
|
-
<script type="module" crossorigin src="/__ph/app/assets/panel-
|
|
8
|
+
<script type="module" crossorigin src="/__ph/app/assets/panel-B47-AaSQ.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/__ph/app/assets/rolldown-runtime-hePW80VL.js">
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/__ph/app/assets/ws-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/__ph/app/assets/ws-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/__ph/app/assets/panel-
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/__ph/app/assets/ws-DAWfQL6l.js">
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/__ph/app/assets/ws-DtkfUYSX.css">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/__ph/app/assets/panel-CSA_nlud.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="app"></div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(){var e=[`bolder`,`quieter`,`polish`,`typeset`,`colorize`,`layout`,`distill`,`adapt`,`animate`,`delight`,`overdrive`,`freeform`],t=/^(padding|margin)(-|$)/;function n(e){return e.trim().replace(/\s+/g,` `)}function r(e,t){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function i(e){return/(?:^|[\s>+~])(?:ul|ol)(?![a-z-])/i.test(e)}function a(e){let t=n(e),r=t.match(/^(.*?)\s*(?:>\s*)?li(?![a-z-])/i);return r&&i(r[1])?n(r[1]):i(t)&&!/(?:^|[\s>+~])li(?![a-z-])/i.test(t)?t:null}function o(e,t){let r=n(e),i=n(t);if(!r||r===i||!i.startsWith(r))return!1;let a=i.charAt(r.length);return a===` `||a===`>`||a===`+`||a===`~`}function s(e){if(e.kind!==`patch`||!e.patch||e.patch.text!==void 0||e.patch.attrs)return!1;let n=Object.keys(e.patch.style??{});return n.length>0&&n.every(e=>t.test(e))}function c(e){if(e?.style)return Object.entries(e.style).map(([e,t])=>`${e}: ${t}`).join(`; `)||void 0}function l(e){let t={selector:e.selector},n=c(e.patch);return n&&(t.css=n),e.patch?.text!==void 0&&(t.text=e.anchor?.text?`${e.anchor.text} → ${e.patch.text}`:e.patch.text),e.patch?.attrs?.src&&(t.image=e.patch.attrs.src.startsWith(`data:`)?`(uploaded image)`:e.patch.attrs.src),t}function u(e){return e.patch?.style??{}}function d(e){let t=e.anchor?.text?.trim();if(t)return`「${r(t,42)}」这一块`;let n=(e.anchor?.tag||``).toLowerCase();if(n===`img`||/(?:^|[\s>+~])img(?![a-z-])/i.test(e.selector))return`这张照片`;if(/^h[1-6]$/.test(n)||/(?:^|[\s>+~])h[1-6](?![a-z-])/i.test(e.selector))return`这个标题`;let i=e.label?.replace(/^[a-z0-9-]+\s*/i,``).replace(/^"|"$/g,``).trim();return i?`「${r(i,42)}」这一块`:`页面上标出的这一块`}function f(e){return(e.anchor?.tag||``).toLowerCase()===`img`||/(?:^|[\s>+~])img(?![a-z-])/i.test(e.selector)||!!e.patch?.attrs?.src}function p(e){return/^h[1-6]$/i.test(e.anchor?.tag||``)||/(?:^|[\s>+~])h[1-6](?![a-z-])/i.test(e.selector)}function m(e){let t=e.map(e=>`${e.anchor?.text??``} ${e.label??``} ${e.note??``}`).join(` `);return/书目|书单|bibliography|\bC\+\+|Tour of|Programming:/i.test(t)}function h(e){let t=u(e),n=Object.values(t).join(` `),r=/#fff\b|#ffffff|white|rgb\(\s*255\s*,\s*255\s*,\s*255/i.test(n),i=!!(t.border||t[`border-width`]||t[`border-style`]||t[`border-color`]),a=/rotate\(\s*(-?[\d.]+)\s*deg/i.exec(t.transform||n),o=a?Number(a[1]):0,s=!!t[`box-shadow`],c=[];i&&c.push(r?`加上一圈白边`:`加上了边框`),a&&o<-.2?c.push(`微微向左倾斜`):a&&o>.2&&c.push(`微微向右倾斜`),s&&c.push(`底下多了一层阴影`);let l=r&&i&&!!a&&s,d=c.length?`这张照片${c.join(`,`)}${l?`,看起来像一张放在桌上的拍立得`:``}。`:`这张照片的外观改了,改前和改后的样子在下面。`,f=`照片的外观改了`;return l?f=`照片改成斜放的拍立得`:r&&i&&a?f=`照片加上白边并斜放`:c[0]&&(f=`照片${c[0]}`),{title:f,say:d}}function g(e){let t=e.anchor?.text?.trim(),n=e.patch?.text?.trim(),i=u(e)[`font-style`]===`italic`,a=!!t?.endsWith(`!`)&&!!n&&!n.endsWith(`!`),o=p(e)?`标题`:`这段文字`,s=[];return t&&n&&t!==n?s.push(`从「${r(t,80)}」改成了「${r(n,80)}」`):n&&s.push(`改成了「${r(n,80)}」`),i&&s.push(s.length?`并改成斜体`:`改成了斜体`),a&&s.push(`感叹号去掉了`),s.length?{title:i&&a?`${o}改成斜体,并去掉感叹号`:i?`${o}改成斜体`:a?`${o}去掉感叹号`:`${o}文字改了`,say:`${o}${s.join(`,`)}。`}:x(e)}var _=[`零`,`一`,`两`,`三`,`四`,`五`,`六`,`七`,`八`,`九`,`十`],v=e=>e>=1&&e<=10?_[e]:String(e);function y(e){if(!e)return NaN;let t=parseFloat(e);return Number.isFinite(t)?t:NaN}function b(e){let t=m(e)?`书目`:`列表`,r=e.map(e=>{let t=Number(/nth-(?:child|of-type)\((\d+)\)/i.exec(e.selector)?.[1]??NaN),n=u(e);return{n:t,px:y(n[`font-size`]),border:!!(n[`border-bottom`]||n[`border-bottom-width`]),bold:Number(n[`font-weight`])>=600||/bold/i.test(n[`font-weight`]||``)}}).filter(e=>!Number.isNaN(e.n)&&!Number.isNaN(e.px)).sort((e,t)=>e.n-t.n),i=+!!r.length;for(let e=1;e<r.length&&r[e].px<r[e-1].px-.5;e++)i=e+1;let o=r.find(e=>e.border),s=o?r.indexOf(o)+1:i,c=r.slice(s).some(e=>e.bold),l=e.find(e=>a(e.selector)===n(e.selector)),d=[`整段${t}${/none/i.test(u(l??e[0])[`list-style`]||u(l??e[0])[`list-style-type`]||``)?`不再是同一号字的圆点列表`:`的字号层次改了`}`];return s>=2&&d.push(`前${v(s)}项由大到小排开`),o&&d.push(`第${v(o.n)}项下面加了一条线`),c&&d.push(`后面的项改成同一号的加粗字`),{title:s>=2?`${t}改成由大到小的字号阶梯`:`${t}的外观改了`,say:`${d.join(`,`)}。`}}function x(e){let t=u(e),n=[];t[`font-style`]===`italic`&&n.push(`改成了斜体`),(Number(t[`font-weight`])>=600||/bold/i.test(t[`font-weight`]||``))&&n.push(`改成了粗体`),t[`font-size`]&&n.push(`字号改成 ${t[`font-size`].replace(`px`,` 像素`)}`),t[`font-family`]&&n.push(`换了一套字体`),t.color&&n.push(`文字颜色改了`),(t[`background-color`]||t.background)&&n.push(`背景改了`),t[`border-radius`]&&n.push(`圆角改了`),(t.border||t[`border-color`])&&n.push(`边框改了`),(t[`text-decoration`]||t[`text-decoration-line`])&&n.push(`文字装饰改了`),t.opacity&&n.push(`透明度改了`);let r=d(e);return n.length?{title:`这一块的外观改了`,say:`${r}${n.join(`,`)}。`}:{title:`这一块的外观改了`,say:`${r}的外观改了,差别看下面的改前和改后。`}}function S(e){let t=e.note.trim();return{title:r(t.split(/[。.!!?\n]/)[0]?.trim()||`文字意见`,36),say:t,where:`关于${d(e)}`}}function C(e,t){if(t)return b(e);let n=e[0];return!n||n.kind===`note`?S(n):n.patch?.text===void 0?f(n)?h(n):x(n):g(n)}function w(e,t,r){let i=r?a(e[0].selector):null,o=r?e.find(e=>n(e.selector)===i)??[...e].sort((e,t)=>e.selector.length-t.selector.length||e.n-t.n)[0]:e[0],s=C(e,r),c=[...e].sort((e,t)=>e.n-t.n),u=[...c,...t].map(l);return{id:o.id,n:o.n,kind:o.kind,path:o.path,primary:o,members:c,extras:t,title:s.title,say:s.say,...s.where?{where:s.where}:{},status:e.every(e=>e.status===`resolved`)?`resolved`:`open`,authorName:o.author?.name||``,lines:u}}function T(e){let t=new Map;for(let n of e){let e=a(n.selector);if(!e)continue;let r=e;t.set(r,[...t.get(r)??[],n])}return[...t.values()].filter(e=>e.length>=2)}function E(e){let t=[...new Set(e.map(e=>e.path))],n=[];for(let r of t){let t=e.filter(e=>e.path===r),i=t.filter(e=>e.kind!==`patch`||!e.patch),a=t.filter(e=>e.kind===`patch`&&e.patch),c=T(a),l=new Set(c.flat().map(e=>e.id)),u=a.filter(e=>!l.has(e.id)),d=new Set(u.filter(e=>s(e)&&u.some(t=>t!==e&&o(e.selector,t.selector))||s(e)&&c.some(t=>t.some(t=>o(e.selector,t.selector)))).map(e=>e.id)),f=u.filter(e=>d.has(e.id)),p=u.filter(e=>!d.has(e.id)),m=[...i.map(e=>w([e],[],!1)),...c.map(e=>w(e,f.filter(t=>e.some(e=>o(t.selector,e.selector))),!0)),...p.map(e=>w([e],f.filter(t=>o(t.selector,e.selector)),!1))];n.push(...m)}return n.sort((e,t)=>Number(e.status===`resolved`)-Number(t.status===`resolved`)||e.n-t.n)}function D(e){return E(e.map((e,t)=>({id:`tmp_${t}`,n:t+1,kind:`patch`,path:`/`,selector:e.selector,note:``,patch:e.patch,author:{id:`tmp`,name:`tmp`,kind:`human`},status:`open`,replies:[],createdAt:0}))).map(e=>e.primary.selector)}var O=/^(css|sc|jsx|emotion|svelte|astro|data-v)-|[0-9a-f]{6,}|__[A-Za-z0-9]{5,}$|^_/,k=80,A=4e3,j=e=>e.replace(/\s+/g,` `).trim(),ee=e=>j(e.textContent??``);function te(e){return[...e.classList].filter(e=>!O.test(e)&&e.length<40).slice(0,6)}function M(e,t){if(e===t)return 1;if(!e||!t||e.length<2||t.length<2)return 0;let n=new Map;for(let t=0;t<e.length-1;t++){let r=e.slice(t,t+2);n.set(r,(n.get(r)??0)+1)}let r=0;for(let e=0;e<t.length-1;e++){let i=t.slice(e,e+2),a=n.get(i)??0;a>0&&(n.set(i,a-1),r++)}return 2*r/(e.length+t.length-2)}function N(e,t,n=[]){if(e.tagName.toLowerCase()!==t.tag)return 0;let r=0,i=0,a=(e,t)=>{i+=e,r+=e*t};if(t.id&&a(3,+(e.id===t.id)),t.attrs)for(let[n,r]of Object.entries(t.attrs)){let t=e.getAttribute(n);a(n===`href`||n===`src`?1:2,t===r?1:t?M(t,r)*.5:0)}if(t.text!==void 0){let r=ee(e).slice(0,k);if(a(4,Math.max(M(r,t.text),...n.map(e=>M(r,j(e).slice(0,k))))),t.prefix||t.suffix){let n=e.parentElement?ee(e.parentElement):``,r=[t.prefix&&n.includes(t.prefix.slice(-12))?1:0,t.suffix&&n.includes(t.suffix.slice(0,12))?1:0];a(1,(r[0]+r[1])/(+!!t.prefix+ +!!t.suffix))}}if(t.classes?.length){let n=new Set(te(e));a(1,t.classes.filter(e=>n.has(e)).length/t.classes.length)}return i?r/i:1}function ne(e,t,n={}){let r=n.root??document,i=n.isOwn??(()=>!1),a=[];try{a=[...r.querySelectorAll(e)].filter(e=>!i(e))}catch{}if(!t)return a[0]?{el:a[0],how:`selector`,score:1}:null;let o=null;for(let e of a.slice(0,50)){let r=N(e,t,n.altTexts);r>=.35&&(!o||r>o.score)&&(o={el:e,how:`selector`,score:r})}if(o&&o.score>=.6)return o;let s=r.getElementsByTagName(t.tag),c=null;for(let e=0;e<s.length&&e<A;e++){let r=s[e];if(i(r))continue;let a=N(r,t,n.altTexts);a>=.6&&(!c||a>c.score)&&(c={el:r,how:`fuzzy`,score:a})}return c&&(!o||c.score>o.score+.15)?c:o}var P=/^(css|sc|jsx|emotion|svelte|astro|data-v)-|[0-9a-f]{6,}|__[A-Za-z0-9]{5,}$|^_/;function F(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/[^\w-]/g,e=>`\\${e}`)}function I(e){return[...e.classList].filter(e=>!P.test(e)&&e.length<40).slice(0,3)}function re(e){let t=e.ownerDocument;if(e.id&&!/\d{3,}/.test(e.id)){let n=`#${F(e.id)}`;try{if(t.querySelectorAll(n).length===1)return n}catch{}}let n=[],r=e;for(let e=0;r&&r!==t.documentElement&&e<6;e++){let e=r.tagName.toLowerCase();if(r.id&&!/\d{3,}/.test(r.id)){n.unshift(`#${F(r.id)}`);break}let i=I(r);i.length&&(e+=i.map(e=>`.${F(e)}`).join(``));let a=r.parentElement;if(a){let t=[...a.children].filter(e=>e.tagName===r.tagName);t.length>1&&(e+=`:nth-of-type(${t.indexOf(r)+1})`)}n.unshift(e);let o=n.join(` > `);try{if(t.querySelectorAll(o).length===1)return o}catch{}r=a}return n.join(` > `)}function L(e,t){return e.length>t?e.slice(0,t-1)+`…`:e}function R(e){return(e.innerText??e.textContent??``).replace(/\s+/g,` `).trim()}function z(e){let t=e.cloneNode(!0),n=t.matches?.(`input[type=password]`)?[t]:[...t.querySelectorAll(`input[type=password]`)];for(let e of n)e.removeAttribute(`value`);return t.outerHTML}var B=[`display`,`position`,`color`,`background-color`,`font-family`,`font-size`,`font-weight`,`line-height`,`letter-spacing`,`text-align`,`padding`,`margin`,`gap`,`border`,`border-radius`,`box-shadow`,`width`,`height`,`flex-direction`,`justify-content`,`align-items`,`grid-template-columns`];function ie(e){let t=getComputedStyle(e),n={};for(let e of B){let r=t.getPropertyValue(e);r&&r!==`none`&&r!==`normal`&&r!==`auto`&&r!==`0px`&&r!==`rgba(0, 0, 0, 0)`&&(n[e]=r)}return{selector:re(e),tagName:e.tagName,id:e.id||void 0,classes:[...e.classList],text:L(R(e),300),outerHTML:L(z(e),6e3),styles:n,url:location.href}}function ae(){return matchMedia(`(prefers-reduced-motion: reduce)`).matches}var oe=50;function se(){let e=new Map,t=new Map,n=e=>{let n=(t.get(e)??0)+1;return t.set(e,n),n<=oe},r=(t,n,r)=>{let i={el:n,style:{},shown:{}};for(let[e,t]of Object.entries(r.style??{}))i.style[e]=[n.style.getPropertyValue(e),n.style.getPropertyPriority(e)],n.style.setProperty(e,t,`important`),i.shown[e]=n.style.getPropertyValue(e);if(r.text!==void 0&&(i.children=[...n.childNodes],n.textContent=r.text,i.applied=n.innerHTML),r.attrs){i.attrs={};let e=(e,t)=>{t!==void 0&&(i.attrs[e]=n.getAttribute(e),n.setAttribute(e,t))};r.attrs.src!==void 0&&(i.attrs.srcset=n.getAttribute(`srcset`),n.removeAttribute(`srcset`)),e(`src`,r.attrs.src),e(`alt`,r.attrs.alt)}e.set(t,i)},i=t=>{let n=e.get(t);if(n&&(e.delete(t),n.el.isConnected)){for(let[e,[t,r]]of Object.entries(n.style))t?n.el.style.setProperty(e,t,r):n.el.style.removeProperty(e);n.children&&n.el.replaceChildren(...n.children);for(let[e,t]of Object.entries(n.attrs??{}))t===null?n.el.removeAttribute(e):n.el.setAttribute(e,t)}};return{elOf(t){let n=e.get(t);return n?.el.isConnected?n.el:void 0},ensure(t,i,a){let o=e.get(t);if(!o||!o.el.isConnected){e.delete(t);let o=a();return o&&n(t)&&r(t,o,i),o}let s=o.el.style;for(let[e,r]of Object.entries(i.style??{}))(s.getPropertyValue(e)!==o.shown[e]||s.getPropertyPriority(e)!==`important`)&&n(t)&&(s.setProperty(e,r,`important`),o.shown[e]=s.getPropertyValue(e));o.applied!==void 0&&o.el.innerHTML!==o.applied&&n(t)&&(o.children=[...o.el.childNodes],o.el.textContent=i.text??``,o.applied=o.el.innerHTML);let c=i.attrs?.src;return c!==void 0&&(o.el.getAttribute(`src`)!==c||o.el.hasAttribute(`srcset`))&&n(t)&&(o.el.removeAttribute(`srcset`),o.el.setAttribute(`src`,c)),i.attrs?.alt!==void 0&&o.el.getAttribute(`alt`)!==i.attrs.alt&&n(t)&&o.el.setAttribute(`alt`,i.attrs.alt),o.el},revert:i,revertOn(t){for(let[n,r]of[...e].reverse())r.el===t&&i(n)},prune(n){for(let t of[...e.keys()].reverse())n(t)||i(t);for(let e of[...t.keys()])n(e)||t.delete(e)}}}var V=`display.position.color.background-color.font-family.font-size.font-weight.font-style.line-height.letter-spacing.text-align.text-decoration.text-decoration-line.padding.margin.border.border-top.border-right.border-bottom.border-left.border-radius.box-shadow.width.height.max-width.transform.list-style.list-style-type.opacity.white-space.gap`.split(`.`),ce=new Set([`normal`,`auto`,`0px`,`rgba(0, 0, 0, 0)`,`static`]),H=new Set([`list-style`,`list-style-type`,`text-decoration`,`text-decoration-line`]),U=48;function le(e){if(e.tagName===`LI`||e.closest(`li`)){let t=e.closest(`ul, ol`);if(t instanceof HTMLElement)return t}return e}function ue(e){let t=e.cloneNode(!0),n=[e,...e.querySelectorAll(`*`)].slice(0,U),r=[t,...t.querySelectorAll(`*`)];for(let e=0;e<n.length;e++){let t=n[e],i=r[e];if(!(t instanceof HTMLElement)||!(i instanceof HTMLElement))continue;let a=getComputedStyle(t),o=[];for(let e of V){let t=a.getPropertyValue(e);t&&!ce.has(t)&&(t!==`none`||H.has(e))&&o.push(`${e}: ${t}`)}t instanceof HTMLImageElement&&(t.currentSrc||t.src)&&(i.src=t.currentSrc||t.src),o.length&&i.setAttribute(`style`,o.join(`; `))}t.querySelectorAll(`script, iframe, object`).forEach(e=>e.remove());let i=t.outerHTML;return i.length>4e4?i.slice(0,4e4):i}var W={pick:`取点`,pickTip:`点选页面元素:引用到对话、评论或修改(Shift+点击直接引用,Esc 退出)`,pickTipReviewer:`点选页面元素来评论或修改(Esc 退出)`,pickBusy:`Agent 正在操作页面,暂不能取点`,artifacts:`产物`,chat:`对话`,eye:`候选`,eyeTip:`按住看原版,单击隐藏候选`,notReady:`面板加载中…`,brand:`Page Harness`,theme:`切换明暗`,collapse:`收起`,close:`关闭`,bannerOn:`Agent 可操作此页面`,bannerBusy:`Agent 正在操作…`,stop:`停止`,picked:`已加入对话`,pickedQueued:`已暂存,面板就绪后加入对话`,pickLimit:`最多暂存 20 个元素`,sessionDead:`与 Page Harness 的连接已断开,请检查终端`,review:`意见`,reviewTitle:`页面意见`,reviewEmpty:`还没有意见。`,showChanges:`显示修改`,exportMd:`导出`,clearAll:`清空`,clearConfirm:`再点一次确认清空`,sev_issue:`问题`,sev_suggestion:`建议`,sev_info:`说明`,kindPatch:`修改`,viewOriginal:`看原版`,viewChange:`看修改`,remove:`删除`,notFound:`页面上找不到这个元素`,reviewEmptyHere:`这个页面还没有意见,其他页面的在「全部」里。`,tabHere:`本页`,tabAll:`全部`,comment:`评论`,edit:`编辑`,commentPh:`这里有什么问题或建议?`,pickQuote:`引用到对话`,pickLive:`Live 候选`,approveLabel:`本页结论`,reviewHow:`点底栏「取点」,选中元素后点「评论」。`,reviewHowEdit:`点底栏「取点」,选中元素后点「评论」或「编辑」。`,editSourceOnly:`有源码时请让 Agent 直接改代码;页面编辑只在评审模式可用`,save:`保存`,reply:`回复`,replyPh:`回复…(Enter 发送)`,replies:`{n} 条回复`,resolve:`标记解决`,reopen:`重新打开`,resolved:`已解决`,approve:`通过`,requestChanges:`需修改`,approvedBy:`✓ {name} 通过`,changesBy:`✎ {name} 需修改`,detached:`页面上找不到了`,goPage:`去`,fieldText:`文字`,fieldColor:`文字颜色`,fieldBg:`背景`,fieldSize:`字号 px`,fieldWeight:`字重`,fieldPadding:`内边距`,fieldRadius:`圆角`,fieldImage:`图片地址`,fieldNote:`说明(可选):为什么这么改`,textLocked:`这个元素里还有子元素,不能直接改文字;想改文字请选更里层的元素。`,noChanges:`还没有任何修改`,needName:`先在面板里填写你的名字`,newFrom:`{name} 添加了 #{n}`,reviewer:`评审`,modeSelect:`选元素`,modeInsert:`插入区块`,steerPlaceholder:`或描述整页要怎么改…`,steerGo:`生成`,quote:`引用`,designTitle:`设计候选`,promptPlaceholder:`补充说明(可选)`,insertPlaceholder:`描述要插入的区块…`,before:`之前`,after:`之后`,count:`数量`,display:`展示`,inplace:`原位切换`,compare:`并排对比`,marks:`批注`,draw:`圈画`,pin:`定位`,undo:`撤销`,clear:`清空`,notePlaceholder:`这里要怎么改?`,noteEmpty:`意见不能为空`,generate:`生成候选`,cancel:`取消`,original:`原版`,accept:`采用`,discard:`放弃`,retry:`重试`,retryAccept:`重试并采用`,refinePlaceholder:`细化当前候选…`,reload:`重新加载`,tellAgent:`告诉 Agent`,notMounted:`候选没有出现在页面上`,otherRoute:`候选在另一个页面`,goThere:`跳过去`,params:`参数`,status_generating:`生成中`,status_refining:`细化中`,status_accepting:`采用中`,status_discarding:`放弃中`,status_ready:`可挑选`,status_failed:`失败`,status_accepted:`已采用`,status_discarded:`已放弃`,maxMarks:`最多 8 处批注`,blockedNested:`这里已有候选,请先采用或放弃`,actions:{bolder:`加粗`,quieter:`减弱`,polish:`润色`,typeset:`排版`,colorize:`配色`,layout:`布局`,distill:`精简`,adapt:`适配`,animate:`动效`,delight:`惊喜`,overdrive:`大胆`,freeform:`自由`}},de={pick:`Pick`,pickTip:`Click an element to quote it in the chat, comment on it or change it (Shift+click quotes directly, Esc exits)`,pickTipReviewer:`Click an element to comment on it or change it (Esc exits)`,pickBusy:`The agent is operating the page`,artifacts:`Artifacts`,chat:`Chat`,eye:`Candidates`,eyeTip:`Hold to see the original, click to hide candidates`,notReady:`Panel is loading…`,brand:`Page Harness`,theme:`Toggle theme`,collapse:`Collapse`,close:`Close`,bannerOn:`The agent can operate this page`,bannerBusy:`The agent is operating…`,stop:`Stop`,picked:`Added to chat`,pickedQueued:`Saved; it will be added when the panel is ready`,pickLimit:`Up to 20 elements can be queued`,sessionDead:`Lost connection to Page Harness; check the terminal`,review:`Notes`,reviewTitle:`Page notes`,reviewEmpty:`No notes yet.`,showChanges:`Show changes`,exportMd:`Export`,clearAll:`Clear`,clearConfirm:`Click again to clear all`,sev_issue:`Issue`,sev_suggestion:`Suggestion`,sev_info:`Info`,kindPatch:`Change`,viewOriginal:`Original`,viewChange:`Changed`,remove:`Remove`,notFound:`This element is not on the page`,reviewEmptyHere:`No notes on this page yet; other pages are under All.`,tabHere:`This page`,tabAll:`All`,comment:`Comment`,edit:`Edit`,commentPh:`What is wrong here, or what would you suggest?`,pickQuote:`Quote in chat`,pickLive:`Live candidates`,approveLabel:`This page`,reviewHow:`Click Pick in the dock, choose an element, then Comment.`,reviewHowEdit:`Click Pick in the dock, choose an element, then Comment or Edit.`,editSourceOnly:`With source, ask the agent to change the code; page edits are for review mode`,save:`Save`,reply:`Reply`,replyPh:`Reply… (Enter to send)`,replies:`{n} replies`,resolve:`Resolve`,reopen:`Reopen`,resolved:`Resolved`,approve:`Approve`,requestChanges:`Request changes`,approvedBy:`✓ {name} approved`,changesBy:`✎ {name} requested changes`,detached:`not found on the page`,goPage:`Go to`,fieldText:`Text`,fieldColor:`Text color`,fieldBg:`Background`,fieldSize:`Size px`,fieldWeight:`Weight`,fieldPadding:`Padding`,fieldRadius:`Radius`,fieldImage:`Image URL`,fieldNote:`Why (optional)`,textLocked:`This element contains other elements, so its text cannot be edited here; pick an inner element.`,noChanges:`Nothing changed yet`,needName:`Enter your name in the panel first`,newFrom:`{name} added #{n}`,reviewer:`Review`,modeSelect:`Select`,modeInsert:`Insert block`,steerPlaceholder:`Or describe a page-wide change…`,steerGo:`Generate`,quote:`Quote`,designTitle:`Design candidates`,promptPlaceholder:`Extra instructions (optional)`,insertPlaceholder:`Describe the block to insert…`,before:`Before`,after:`After`,count:`Count`,display:`Display`,inplace:`In place`,compare:`Side by side`,marks:`Marks`,draw:`Circle`,pin:`Pin`,undo:`Undo`,clear:`Clear`,notePlaceholder:`What should change here?`,noteEmpty:`A note needs text`,generate:`Generate`,cancel:`Cancel`,original:`Original`,accept:`Accept`,discard:`Discard`,retry:`Retry`,retryAccept:`Retry & accept`,refinePlaceholder:`Refine this candidate…`,reload:`Reload`,tellAgent:`Tell the agent`,notMounted:`The candidates did not appear on the page`,otherRoute:`The candidates are on another page`,goThere:`Go there`,params:`Tune`,status_generating:`Generating`,status_refining:`Refining`,status_accepting:`Accepting`,status_discarding:`Discarding`,status_ready:`Ready`,status_failed:`Failed`,status_accepted:`Accepted`,status_discarded:`Discarded`,maxMarks:`Up to 8 marks`,blockedNested:`There are candidates here already; accept or discard them first`,actions:{bolder:`Bolder`,quieter:`Quieter`,polish:`Polish`,typeset:`Typeset`,colorize:`Colorize`,layout:`Layout`,distill:`Distill`,adapt:`Adapt`,animate:`Animate`,delight:`Delight`,overdrive:`Overdrive`,freeform:`Freeform`}};function fe(e){return e===`en`?de:W}var pe=`
|
|
1
|
+
(function(){var e=[`bolder`,`quieter`,`polish`,`typeset`,`colorize`,`layout`,`distill`,`adapt`,`animate`,`delight`,`overdrive`,`freeform`],t=/^(padding|margin)(-|$)/;function n(e){return e.trim().replace(/\s+/g,` `)}function r(e,t){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function i(e){return/(?:^|[\s>+~])(?:ul|ol)(?![a-z-])/i.test(e)}function a(e){let t=n(e),r=t.match(/^(.*?)\s*(?:>\s*)?li(?![a-z-])/i);return r&&i(r[1])?n(r[1]):i(t)&&!/(?:^|[\s>+~])li(?![a-z-])/i.test(t)?t:null}function o(e,t){let r=n(e),i=n(t);if(!r||r===i||!i.startsWith(r))return!1;let a=i.charAt(r.length);return a===` `||a===`>`||a===`+`||a===`~`}function s(e){if(e.kind!==`patch`||!e.patch||e.patch.text!==void 0||e.patch.attrs)return!1;let n=Object.keys(e.patch.style??{});return n.length>0&&n.every(e=>t.test(e))}function c(e){if(e?.style)return Object.entries(e.style).map(([e,t])=>`${e}: ${t}`).join(`; `)||void 0}function l(e){let t={selector:e.selector},n=c(e.patch);return n&&(t.css=n),e.patch?.text!==void 0&&(t.text=e.anchor?.text?`${e.anchor.text} → ${e.patch.text}`:e.patch.text),e.patch?.attrs?.src&&(t.image=e.patch.attrs.src.startsWith(`data:`)?`(uploaded image)`:e.patch.attrs.src),t}function u(e){return e.patch?.style??{}}function d(e){let t=e.anchor?.text?.trim();if(t)return`「${r(t,42)}」这一块`;let n=(e.anchor?.tag||``).toLowerCase();if(n===`img`||/(?:^|[\s>+~])img(?![a-z-])/i.test(e.selector))return`这张照片`;if(/^h[1-6]$/.test(n)||/(?:^|[\s>+~])h[1-6](?![a-z-])/i.test(e.selector))return`这个标题`;let i=e.label?.replace(/^[a-z0-9-]+\s*/i,``).replace(/^"|"$/g,``).trim();return i?`「${r(i,42)}」这一块`:`页面上标出的这一块`}function f(e){return(e.anchor?.tag||``).toLowerCase()===`img`||/(?:^|[\s>+~])img(?![a-z-])/i.test(e.selector)||!!e.patch?.attrs?.src}function p(e){return/^h[1-6]$/i.test(e.anchor?.tag||``)||/(?:^|[\s>+~])h[1-6](?![a-z-])/i.test(e.selector)}function m(e){let t=e.map(e=>`${e.anchor?.text??``} ${e.label??``} ${e.note??``}`).join(` `);return/书目|书单|bibliography|\bC\+\+|Tour of|Programming:/i.test(t)}function h(e){let t=u(e),n=Object.values(t).join(` `),r=/#fff\b|#ffffff|white|rgb\(\s*255\s*,\s*255\s*,\s*255/i.test(n),i=!!(t.border||t[`border-width`]||t[`border-style`]||t[`border-color`]),a=/rotate\(\s*(-?[\d.]+)\s*deg/i.exec(t.transform||n),o=a?Number(a[1]):0,s=!!t[`box-shadow`],c=[];i&&c.push(r?`加上一圈白边`:`加上了边框`),a&&o<-.2?c.push(`微微向左倾斜`):a&&o>.2&&c.push(`微微向右倾斜`),s&&c.push(`底下多了一层阴影`);let l=r&&i&&!!a&&s,d=c.length?`这张照片${c.join(`,`)}${l?`,看起来像一张放在桌上的拍立得`:``}。`:`这张照片的外观改了,改前和改后的样子在下面。`,f=`照片的外观改了`;return l?f=`照片改成斜放的拍立得`:r&&i&&a?f=`照片加上白边并斜放`:c[0]&&(f=`照片${c[0]}`),{title:f,say:d}}function g(e){let t=e.anchor?.text?.trim(),n=e.patch?.text?.trim(),i=u(e)[`font-style`]===`italic`,a=!!t?.endsWith(`!`)&&!!n&&!n.endsWith(`!`),o=p(e)?`标题`:`这段文字`,s=[];return t&&n&&t!==n?s.push(`从「${r(t,80)}」改成了「${r(n,80)}」`):n&&s.push(`改成了「${r(n,80)}」`),i&&s.push(s.length?`并改成斜体`:`改成了斜体`),a&&s.push(`感叹号去掉了`),s.length?{title:i&&a?`${o}改成斜体,并去掉感叹号`:i?`${o}改成斜体`:a?`${o}去掉感叹号`:`${o}文字改了`,say:`${o}${s.join(`,`)}。`}:x(e)}var _=[`零`,`一`,`两`,`三`,`四`,`五`,`六`,`七`,`八`,`九`,`十`],v=e=>e>=1&&e<=10?_[e]:String(e);function y(e){if(!e)return NaN;let t=parseFloat(e);return Number.isFinite(t)?t:NaN}function b(e){let t=m(e)?`书目`:`列表`,r=e.map(e=>{let t=Number(/nth-(?:child|of-type)\((\d+)\)/i.exec(e.selector)?.[1]??NaN),n=u(e);return{n:t,px:y(n[`font-size`]),border:!!(n[`border-bottom`]||n[`border-bottom-width`]),bold:Number(n[`font-weight`])>=600||/bold/i.test(n[`font-weight`]||``)}}).filter(e=>!Number.isNaN(e.n)&&!Number.isNaN(e.px)).sort((e,t)=>e.n-t.n),i=+!!r.length;for(let e=1;e<r.length&&r[e].px<r[e-1].px-.5;e++)i=e+1;let o=r.find(e=>e.border),s=o?r.indexOf(o)+1:i,c=r.slice(s).some(e=>e.bold),l=e.find(e=>a(e.selector)===n(e.selector)),d=[`整段${t}${/none/i.test(u(l??e[0])[`list-style`]||u(l??e[0])[`list-style-type`]||``)?`不再是同一号字的圆点列表`:`的字号层次改了`}`];return s>=2&&d.push(`前${v(s)}项由大到小排开`),o&&d.push(`第${v(o.n)}项下面加了一条线`),c&&d.push(`后面的项改成同一号的加粗字`),{title:s>=2?`${t}改成由大到小的字号阶梯`:`${t}的外观改了`,say:`${d.join(`,`)}。`}}function x(e){let t=u(e),n=[];t[`font-style`]===`italic`&&n.push(`改成了斜体`),(Number(t[`font-weight`])>=600||/bold/i.test(t[`font-weight`]||``))&&n.push(`改成了粗体`),t[`font-size`]&&n.push(`字号改成 ${t[`font-size`].replace(`px`,` 像素`)}`),t[`font-family`]&&n.push(`换了一套字体`),t.color&&n.push(`文字颜色改了`),(t[`background-color`]||t.background)&&n.push(`背景改了`),t[`border-radius`]&&n.push(`圆角改了`),(t.border||t[`border-color`])&&n.push(`边框改了`),(t[`text-decoration`]||t[`text-decoration-line`])&&n.push(`文字装饰改了`),t.opacity&&n.push(`透明度改了`);let r=d(e);return n.length?{title:`这一块的外观改了`,say:`${r}${n.join(`,`)}。`}:{title:`这一块的外观改了`,say:`${r}的外观改了,差别看下面的改前和改后。`}}function S(e){let t=e.note.trim();return{title:r(t.split(/[。.!!?\n]/)[0]?.trim()||`文字意见`,36),say:t,where:`关于${d(e)}`}}function C(e,t){if(t)return b(e);let n=e[0];return!n||n.kind===`note`?S(n):n.patch?.text===void 0?f(n)?h(n):x(n):g(n)}function w(e,t,r){let i=r?a(e[0].selector):null,o=r?e.find(e=>n(e.selector)===i)??[...e].sort((e,t)=>e.selector.length-t.selector.length||e.n-t.n)[0]:e[0],s=C(e,r),c=[...e].sort((e,t)=>e.n-t.n),u=[...c,...t].map(l);return{id:o.id,n:o.n,kind:o.kind,path:o.path,primary:o,members:c,extras:t,title:s.title,say:s.say,...s.where?{where:s.where}:{},status:e.every(e=>e.status===`resolved`)?`resolved`:`open`,authorName:o.author?.name||``,lines:u}}function T(e){let t=new Map;for(let n of e){let e=a(n.selector);if(!e)continue;let r=e;t.set(r,[...t.get(r)??[],n])}return[...t.values()].filter(e=>e.length>=2)}function E(e){let t=[...new Set(e.map(e=>e.path))],n=[];for(let r of t){let t=e.filter(e=>e.path===r),i=t.filter(e=>e.kind!==`patch`||!e.patch),a=t.filter(e=>e.kind===`patch`&&e.patch),c=T(a),l=new Set(c.flat().map(e=>e.id)),u=a.filter(e=>!l.has(e.id)),d=new Set(u.filter(e=>s(e)&&u.some(t=>t!==e&&o(e.selector,t.selector))||s(e)&&c.some(t=>t.some(t=>o(e.selector,t.selector)))).map(e=>e.id)),f=u.filter(e=>d.has(e.id)),p=u.filter(e=>!d.has(e.id)),m=[...i.map(e=>w([e],[],!1)),...c.map(e=>w(e,f.filter(t=>e.some(e=>o(t.selector,e.selector))),!0)),...p.map(e=>w([e],f.filter(t=>o(t.selector,e.selector)),!1))];n.push(...m)}return n.sort((e,t)=>Number(e.status===`resolved`)-Number(t.status===`resolved`)||e.n-t.n)}function D(e){return E(e.map((e,t)=>({id:`tmp_${t}`,n:t+1,kind:`patch`,path:`/`,selector:e.selector,note:``,patch:e.patch,author:{id:`tmp`,name:`tmp`,kind:`human`},status:`open`,replies:[],createdAt:0}))).map(e=>e.primary.selector)}var O=/^(css|sc|jsx|emotion|svelte|astro|data-v)-|[0-9a-f]{6,}|__[A-Za-z0-9]{5,}$|^_/,k=80,A=4e3,j=e=>e.replace(/\s+/g,` `).trim(),ee=e=>j(e.textContent??``);function te(e){return[...e.classList].filter(e=>!O.test(e)&&e.length<40).slice(0,6)}function M(e,t){if(e===t)return 1;if(!e||!t||e.length<2||t.length<2)return 0;let n=new Map;for(let t=0;t<e.length-1;t++){let r=e.slice(t,t+2);n.set(r,(n.get(r)??0)+1)}let r=0;for(let e=0;e<t.length-1;e++){let i=t.slice(e,e+2),a=n.get(i)??0;a>0&&(n.set(i,a-1),r++)}return 2*r/(e.length+t.length-2)}function ne(e,t,n=[]){if(e.tagName.toLowerCase()!==t.tag)return 0;let r=0,i=0,a=(e,t)=>{i+=e,r+=e*t};if(t.id&&a(3,+(e.id===t.id)),t.attrs)for(let[n,r]of Object.entries(t.attrs)){let t=e.getAttribute(n);a(n===`href`||n===`src`?1:2,t===r?1:t?M(t,r)*.5:0)}if(t.text!==void 0){let r=ee(e).slice(0,k);if(a(4,Math.max(M(r,t.text),...n.map(e=>M(r,j(e).slice(0,k))))),t.prefix||t.suffix){let n=e.parentElement?ee(e.parentElement):``,r=[t.prefix&&n.includes(t.prefix.slice(-12))?1:0,t.suffix&&n.includes(t.suffix.slice(0,12))?1:0];a(1,(r[0]+r[1])/(+!!t.prefix+ +!!t.suffix))}}if(t.classes?.length){let n=new Set(te(e));a(1,t.classes.filter(e=>n.has(e)).length/t.classes.length)}return i?r/i:1}function re(e,t,n={}){let r=n.root??document,i=n.isOwn??(()=>!1),a=[];try{a=[...r.querySelectorAll(e)].filter(e=>!i(e))}catch{}if(!t)return a[0]?{el:a[0],how:`selector`,score:1}:null;let o=null;for(let e of a.slice(0,50)){let r=ne(e,t,n.altTexts);r>=.35&&(!o||r>o.score)&&(o={el:e,how:`selector`,score:r})}if(o&&o.score>=.6)return o;let s=r.getElementsByTagName(t.tag),c=null;for(let e=0;e<s.length&&e<A;e++){let r=s[e];if(i(r))continue;let a=ne(r,t,n.altTexts);a>=.6&&(!c||a>c.score)&&(c={el:r,how:`fuzzy`,score:a})}return c&&(!o||c.score>o.score+.15)?c:o}var N=/^(css|sc|jsx|emotion|svelte|astro|data-v)-|[0-9a-f]{6,}|__[A-Za-z0-9]{5,}$|^_/;function P(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/[^\w-]/g,e=>`\\${e}`)}function F(e){return[...e.classList].filter(e=>!N.test(e)&&e.length<40).slice(0,3)}function ie(e){let t=e.ownerDocument;if(e.id&&!/\d{3,}/.test(e.id)){let n=`#${P(e.id)}`;try{if(t.querySelectorAll(n).length===1)return n}catch{}}let n=[],r=e;for(let e=0;r&&r!==t.documentElement&&e<6;e++){let e=r.tagName.toLowerCase();if(r.id&&!/\d{3,}/.test(r.id)){n.unshift(`#${P(r.id)}`);break}let i=F(r);i.length&&(e+=i.map(e=>`.${P(e)}`).join(``));let a=r.parentElement;if(a){let t=[...a.children].filter(e=>e.tagName===r.tagName);t.length>1&&(e+=`:nth-of-type(${t.indexOf(r)+1})`)}n.unshift(e);let o=n.join(` > `);try{if(t.querySelectorAll(o).length===1)return o}catch{}r=a}return n.join(` > `)}function I(e,t){return e.length>t?e.slice(0,t-1)+`…`:e}var L=e=>e.replace(/\s+/g,` `).trim(),ae=/^[ \t\n\r\f]*$/;function R(e){let t=L(e.innerText??e.textContent??``),n=t.split(` `);if(n.length<4||n.filter(e=>[...e].length===1).length/n.length<.6)return t;let r=L(z(e));return r.replace(/\s/g,``)===t.replace(/\s/g,``)?r:t}function z(e){let t=``,n=e=>{let r=getComputedStyle(e).display,i=/flex|grid/.test(r);for(let r of e.childNodes)if(r.nodeType===Node.TEXT_NODE){let e=r.nodeValue??``;t+=ae.test(e)?i?``:` `:e}else if(r.nodeType===Node.ELEMENT_NODE){let e=getComputedStyle(r).display;if(e===`none`)continue;let a=!e.startsWith(`inline`)&&e!==`contents`&&!i;a&&(t+=` `),n(r),a&&(t+=` `)}};return n(e),t}function oe(e,t,n={}){let r=n.gap??12,i=n.margin??12,a=innerWidth,o=innerHeight,s=Math.min(e.offsetWidth||320,a-i*2),c=Math.min(e.offsetHeight||200,o-i*2),l=(n.avoid??[]).filter(e=>e.width>0&&e.height>0),u=e=>Math.min(Math.max(i,e),a-s-i),d=e=>Math.min(Math.max(i,e),o-c-i),f=(e,t)=>e>=i-.5&&t>=i-.5&&e+s<=a-i+.5&&t+c<=o-i+.5,p=(e,t)=>l.some(n=>e<n.right&&e+s>n.left&&t<n.bottom&&t+c>n.top),m=e=>[u(t.left),...l.flatMap(t=>e<t.bottom&&e+c>t.top?[u(t.right+r),u(t.left-r-s)]:[])],h=t.bottom+r,g=t.top-r-c,_=[[t.right+r,d(t.top)],[t.left-r-s,d(t.top)],...m(h).map(e=>[e,h]),...m(g).map(e=>[e,g])],v=_.find(([e,t])=>f(e,t)&&!p(e,t))??_.find(([e,t])=>f(e,t))??[u(t.left),d(o-t.bottom>t.top?h:g)];e.style.left=`${Math.round(v[0])}px`,e.style.top=`${Math.round(v[1])}px`}function se(e,t=[]){let n=0,r=()=>{n||=requestAnimationFrame(()=>(n=0,e()))};addEventListener(`scroll`,r,{capture:!0,passive:!0}),addEventListener(`resize`,r);let i=typeof ResizeObserver<`u`?new ResizeObserver(r):null;for(let e of t)i?.observe(e);return()=>{removeEventListener(`scroll`,r,{capture:!0}),removeEventListener(`resize`,r),i?.disconnect(),n&&cancelAnimationFrame(n),n=0}}function B(e){let t=e.cloneNode(!0),n=t.matches?.(`input[type=password]`)?[t]:[...t.querySelectorAll(`input[type=password]`)];for(let e of n)e.removeAttribute(`value`);return t.outerHTML}var V=[`display`,`position`,`color`,`background-color`,`font-family`,`font-size`,`font-weight`,`line-height`,`letter-spacing`,`text-align`,`padding`,`margin`,`gap`,`border`,`border-radius`,`box-shadow`,`width`,`height`,`flex-direction`,`justify-content`,`align-items`,`grid-template-columns`];function ce(e){let t=getComputedStyle(e),n={};for(let e of V){let r=t.getPropertyValue(e);r&&r!==`none`&&r!==`normal`&&r!==`auto`&&r!==`0px`&&r!==`rgba(0, 0, 0, 0)`&&(n[e]=r)}return{selector:ie(e),tagName:e.tagName,id:e.id||void 0,classes:[...e.classList],text:I(R(e),300),outerHTML:I(B(e),6e3),styles:n,url:location.href}}function le(){return matchMedia(`(prefers-reduced-motion: reduce)`).matches}var ue=50;function de(){let e=new Map,t=new Map,n=e=>{let n=(t.get(e)??0)+1;return t.set(e,n),n<=ue},r=(t,n,r)=>{let i={el:n,style:{},shown:{}};for(let[e,t]of Object.entries(r.style??{}))i.style[e]=[n.style.getPropertyValue(e),n.style.getPropertyPriority(e)],n.style.setProperty(e,t,`important`),i.shown[e]=n.style.getPropertyValue(e);if(r.text!==void 0&&(i.children=[...n.childNodes],n.textContent=r.text,i.applied=n.innerHTML),r.attrs){i.attrs={};let e=(e,t)=>{t!==void 0&&(i.attrs[e]=n.getAttribute(e),n.setAttribute(e,t))};r.attrs.src!==void 0&&(i.attrs.srcset=n.getAttribute(`srcset`),n.removeAttribute(`srcset`)),e(`src`,r.attrs.src),e(`alt`,r.attrs.alt)}e.set(t,i)},i=t=>{let n=e.get(t);if(n&&(e.delete(t),n.el.isConnected)){for(let[e,[t,r]]of Object.entries(n.style))t?n.el.style.setProperty(e,t,r):n.el.style.removeProperty(e);n.children&&n.el.replaceChildren(...n.children);for(let[e,t]of Object.entries(n.attrs??{}))t===null?n.el.removeAttribute(e):n.el.setAttribute(e,t)}};return{elOf(t){let n=e.get(t);return n?.el.isConnected?n.el:void 0},ensure(t,i,a){let o=e.get(t);if(!o||!o.el.isConnected){e.delete(t);let o=a();return o&&n(t)&&r(t,o,i),o}let s=o.el.style;for(let[e,r]of Object.entries(i.style??{}))(s.getPropertyValue(e)!==o.shown[e]||s.getPropertyPriority(e)!==`important`)&&n(t)&&(s.setProperty(e,r,`important`),o.shown[e]=s.getPropertyValue(e));o.applied!==void 0&&o.el.innerHTML!==o.applied&&n(t)&&(o.children=[...o.el.childNodes],o.el.textContent=i.text??``,o.applied=o.el.innerHTML);let c=i.attrs?.src;return c!==void 0&&(o.el.getAttribute(`src`)!==c||o.el.hasAttribute(`srcset`))&&n(t)&&(o.el.removeAttribute(`srcset`),o.el.setAttribute(`src`,c)),i.attrs?.alt!==void 0&&o.el.getAttribute(`alt`)!==i.attrs.alt&&n(t)&&o.el.setAttribute(`alt`,i.attrs.alt),o.el},revert:i,revertOn(t){for(let[n,r]of[...e].reverse())r.el===t&&i(n)},prune(n){for(let t of[...e.keys()].reverse())n(t)||i(t);for(let e of[...t.keys()])n(e)||t.delete(e)}}}var H=`display.position.color.background-color.font-family.font-size.font-weight.font-style.line-height.letter-spacing.text-align.text-decoration.text-decoration-line.padding.margin.border.border-top.border-right.border-bottom.border-left.border-radius.box-shadow.width.height.max-width.transform.list-style.list-style-type.opacity.white-space.gap`.split(`.`),fe=new Set([`normal`,`auto`,`0px`,`rgba(0, 0, 0, 0)`,`static`]),U=new Set([`list-style`,`list-style-type`,`text-decoration`,`text-decoration-line`]),W=48;function pe(e){if(e.tagName===`LI`||e.closest(`li`)){let t=e.closest(`ul, ol`);if(t instanceof HTMLElement)return t}return e}function me(e){let t=e.cloneNode(!0),n=[e,...e.querySelectorAll(`*`)].slice(0,W),r=[t,...t.querySelectorAll(`*`)];for(let e=0;e<n.length;e++){let t=n[e],i=r[e];if(!(t instanceof HTMLElement)||!(i instanceof HTMLElement))continue;let a=getComputedStyle(t),o=[];for(let e of H){let t=a.getPropertyValue(e);t&&!fe.has(t)&&(t!==`none`||U.has(e))&&o.push(`${e}: ${t}`)}t instanceof HTMLImageElement&&(t.currentSrc||t.src)&&(i.src=t.currentSrc||t.src),o.length&&i.setAttribute(`style`,o.join(`; `))}t.querySelectorAll(`script, iframe, object`).forEach(e=>e.remove());let i=t.outerHTML;return i.length>4e4?i.slice(0,4e4):i}var G={pick:`取点`,pickTip:`点选页面元素:引用到对话、评论或修改(Shift+点击直接引用,Esc 退出)`,pickTipReviewer:`点选页面元素来评论或修改(Esc 退出)`,pickBusy:`Agent 正在操作页面,暂不能取点`,artifacts:`产物`,chat:`对话`,eye:`候选`,eyeTip:`按住看原版,单击隐藏候选`,notReady:`面板加载中…`,brand:`Page Harness`,theme:`切换明暗`,collapse:`收起`,close:`关闭`,bannerOn:`Agent 可操作此页面`,bannerBusy:`Agent 正在操作…`,stop:`停止`,picked:`已加入对话`,pickedQueued:`已暂存,面板就绪后加入对话`,pickLimit:`最多暂存 20 个元素`,sessionDead:`与 Page Harness 的连接已断开,请检查终端`,review:`意见`,reviewTitle:`页面意见`,reviewEmpty:`还没有意见。`,showChanges:`显示修改`,exportMd:`导出`,clearAll:`清空`,clearConfirm:`再点一次确认清空`,sev_issue:`问题`,sev_suggestion:`建议`,sev_info:`说明`,kindPatch:`修改`,viewOriginal:`看原版`,viewChange:`看修改`,remove:`删除`,notFound:`页面上找不到这个元素`,reviewEmptyHere:`这个页面还没有意见,其他页面的在「全部」里。`,tabHere:`本页`,tabAll:`全部`,comment:`评论`,edit:`编辑`,commentPh:`这里有什么问题或建议?`,pickQuote:`引用到对话`,pickLive:`Live 候选`,approveLabel:`本页结论`,reviewHow:`点底栏「取点」,选中元素后点「评论」。`,reviewHowEdit:`点底栏「取点」,选中元素后点「评论」或「编辑」。`,editSourceOnly:`有源码时请让 Agent 直接改代码;页面编辑只在评审模式可用`,save:`保存`,reply:`回复`,replyPh:`回复…(Enter 发送)`,replies:`{n} 条回复`,resolve:`标记解决`,reopen:`重新打开`,resolved:`已解决`,approve:`通过`,requestChanges:`需修改`,approvedBy:`✓ {name} 通过`,changesBy:`✎ {name} 需修改`,detached:`页面上找不到了`,goPage:`去`,fieldText:`文字`,fieldColor:`文字颜色`,fieldBg:`背景`,fieldSize:`字号 px`,fieldWeight:`字重`,fieldPadding:`内边距`,fieldRadius:`圆角`,fieldImage:`图片地址`,fieldNote:`说明(可选):为什么这么改`,textLocked:`这个元素里还有子元素,不能直接改文字;想改文字请选更里层的元素。`,noChanges:`还没有任何修改`,needName:`先在面板里填写你的名字`,newFrom:`{name} 添加了 #{n}`,reviewer:`评审`,modeSelect:`选元素`,modeInsert:`插入区块`,steerPlaceholder:`或描述整页要怎么改…`,steerGo:`生成`,quote:`引用`,designTitle:`设计候选`,promptPlaceholder:`补充说明(可选)`,insertPlaceholder:`描述要插入的区块…`,before:`之前`,after:`之后`,count:`数量`,display:`展示`,inplace:`原位切换`,compare:`并排对比`,marks:`批注`,draw:`圈画`,pin:`定位`,undo:`撤销`,clear:`清空`,notePlaceholder:`这里要怎么改?`,noteEmpty:`意见不能为空`,generate:`生成候选`,cancel:`取消`,original:`原版`,accept:`采用`,discard:`放弃`,retry:`重试`,retryAccept:`重试并采用`,refinePlaceholder:`细化当前候选…`,reload:`重新加载`,tellAgent:`告诉 Agent`,notMounted:`候选没有出现在页面上`,otherRoute:`候选在另一个页面`,goThere:`跳过去`,params:`参数`,status_generating:`生成中`,status_refining:`细化中`,status_accepting:`采用中`,status_discarding:`放弃中`,status_ready:`可挑选`,status_failed:`失败`,status_accepted:`已采用`,status_discarded:`已放弃`,maxMarks:`最多 8 处批注`,blockedNested:`这里已有候选,请先采用或放弃`,actions:{bolder:`加粗`,quieter:`减弱`,polish:`润色`,typeset:`排版`,colorize:`配色`,layout:`布局`,distill:`精简`,adapt:`适配`,animate:`动效`,delight:`惊喜`,overdrive:`大胆`,freeform:`自由`}},he={pick:`Pick`,pickTip:`Click an element to quote it in the chat, comment on it or change it (Shift+click quotes directly, Esc exits)`,pickTipReviewer:`Click an element to comment on it or change it (Esc exits)`,pickBusy:`The agent is operating the page`,artifacts:`Artifacts`,chat:`Chat`,eye:`Candidates`,eyeTip:`Hold to see the original, click to hide candidates`,notReady:`Panel is loading…`,brand:`Page Harness`,theme:`Toggle theme`,collapse:`Collapse`,close:`Close`,bannerOn:`The agent can operate this page`,bannerBusy:`The agent is operating…`,stop:`Stop`,picked:`Added to chat`,pickedQueued:`Saved; it will be added when the panel is ready`,pickLimit:`Up to 20 elements can be queued`,sessionDead:`Lost connection to Page Harness; check the terminal`,review:`Notes`,reviewTitle:`Page notes`,reviewEmpty:`No notes yet.`,showChanges:`Show changes`,exportMd:`Export`,clearAll:`Clear`,clearConfirm:`Click again to clear all`,sev_issue:`Issue`,sev_suggestion:`Suggestion`,sev_info:`Info`,kindPatch:`Change`,viewOriginal:`Original`,viewChange:`Changed`,remove:`Remove`,notFound:`This element is not on the page`,reviewEmptyHere:`No notes on this page yet; other pages are under All.`,tabHere:`This page`,tabAll:`All`,comment:`Comment`,edit:`Edit`,commentPh:`What is wrong here, or what would you suggest?`,pickQuote:`Quote in chat`,pickLive:`Live candidates`,approveLabel:`This page`,reviewHow:`Click Pick in the dock, choose an element, then Comment.`,reviewHowEdit:`Click Pick in the dock, choose an element, then Comment or Edit.`,editSourceOnly:`With source, ask the agent to change the code; page edits are for review mode`,save:`Save`,reply:`Reply`,replyPh:`Reply… (Enter to send)`,replies:`{n} replies`,resolve:`Resolve`,reopen:`Reopen`,resolved:`Resolved`,approve:`Approve`,requestChanges:`Request changes`,approvedBy:`✓ {name} approved`,changesBy:`✎ {name} requested changes`,detached:`not found on the page`,goPage:`Go to`,fieldText:`Text`,fieldColor:`Text color`,fieldBg:`Background`,fieldSize:`Size px`,fieldWeight:`Weight`,fieldPadding:`Padding`,fieldRadius:`Radius`,fieldImage:`Image URL`,fieldNote:`Why (optional)`,textLocked:`This element contains other elements, so its text cannot be edited here; pick an inner element.`,noChanges:`Nothing changed yet`,needName:`Enter your name in the panel first`,newFrom:`{name} added #{n}`,reviewer:`Review`,modeSelect:`Select`,modeInsert:`Insert block`,steerPlaceholder:`Or describe a page-wide change…`,steerGo:`Generate`,quote:`Quote`,designTitle:`Design candidates`,promptPlaceholder:`Extra instructions (optional)`,insertPlaceholder:`Describe the block to insert…`,before:`Before`,after:`After`,count:`Count`,display:`Display`,inplace:`In place`,compare:`Side by side`,marks:`Marks`,draw:`Circle`,pin:`Pin`,undo:`Undo`,clear:`Clear`,notePlaceholder:`What should change here?`,noteEmpty:`A note needs text`,generate:`Generate`,cancel:`Cancel`,original:`Original`,accept:`Accept`,discard:`Discard`,retry:`Retry`,retryAccept:`Retry & accept`,refinePlaceholder:`Refine this candidate…`,reload:`Reload`,tellAgent:`Tell the agent`,notMounted:`The candidates did not appear on the page`,otherRoute:`The candidates are on another page`,goThere:`Go there`,params:`Tune`,status_generating:`Generating`,status_refining:`Refining`,status_accepting:`Accepting`,status_discarding:`Discarding`,status_ready:`Ready`,status_failed:`Failed`,status_accepted:`Accepted`,status_discarded:`Discarded`,maxMarks:`Up to 8 marks`,blockedNested:`There are candidates here already; accept or discard them first`,actions:{bolder:`Bolder`,quieter:`Quieter`,polish:`Polish`,typeset:`Typeset`,colorize:`Colorize`,layout:`Layout`,distill:`Distill`,adapt:`Adapt`,animate:`Animate`,delight:`Delight`,overdrive:`Overdrive`,freeform:`Freeform`}};function ge(e){return e===`en`?he:G}var _e=`
|
|
2
2
|
.lv-card { position: fixed; z-index: 2147483646; background: var(--bg); color: var(--fg); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--shadow); font-size: var(--fs); }
|
|
3
3
|
.lv-card button { display: inline-flex; align-items: center; justify-content: center; gap: 4px; border: 1px solid var(--line); background: var(--bg); border-radius: var(--r); padding: 0 10px; height: var(--h); white-space: nowrap; transition: background .12s, border-color .12s; }
|
|
4
4
|
.lv-card button:hover:not(:disabled) { background: var(--bg2); }
|
|
@@ -23,7 +23,10 @@
|
|
|
23
23
|
|
|
24
24
|
.lv-pop { display: flex; gap: 4px; padding: 4px; }
|
|
25
25
|
.lv-design { width: min(380px, calc(100vw - 24px)); max-height: calc(100vh - 24px); overflow: auto; padding: 12px; display: flex; flex-direction: column; gap: 10px; }
|
|
26
|
-
.lv-target { font: var(--fs-sm)
|
|
26
|
+
.lv-target { display: flex; align-items: center; gap: 6px; min-width: 0; font-size: var(--fs-sm); line-height: 1.4; color: var(--fg2); background: var(--bg2); border: 1px solid var(--line2); border-radius: var(--r-sm); padding: 6px 8px; }
|
|
27
|
+
.lv-target .tag { flex: none; padding: 0 5px; border-radius: 4px; background: var(--bg3); color: var(--fg2); font: 10.5px/16px var(--mono); }
|
|
28
|
+
.lv-target .pos { flex: none; color: var(--accent); font-weight: 600; }
|
|
29
|
+
.lv-target .txt { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
27
30
|
.lv-actions { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; }
|
|
28
31
|
.lv-actions button { padding: 0 4px; }
|
|
29
32
|
.lv-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
|
|
@@ -58,4 +61,4 @@
|
|
|
58
61
|
.lv-params .p { display: flex; flex-direction: column; gap: 4px; }
|
|
59
62
|
.lv-params .p .h { display: flex; justify-content: space-between; color: var(--fg2); font-size: var(--fs-sm); }
|
|
60
63
|
.lv-params input[type=range] { padding: 0; height: auto; background: none; border: 0; box-shadow: none; accent-color: var(--accent); }
|
|
61
|
-
`,me=`ph:live-view`,he=[`generating`,`refining`,`accepting`,`discarding`];function G(e,t={},...n){let r=document.createElement(e);for(let[e,n]of Object.entries(t))e===`class`?r.className=n:r.setAttribute(e,n);for(let e of n)r.append(e);return r}function K(e,t,n=``){let r=G(`button`,n?{class:n}:{},e);return r.addEventListener(`click`,e=>{e.stopPropagation(),t()}),r}function q(t){let n=document.createElement(`style`);n.textContent=pe,t.root.appendChild(n);let r=fe(t.lang()),i=[],a=!1,o=`select`,s={};try{s=JSON.parse(sessionStorage.getItem(me)||`{}`)}catch{}let c=!1,l=!1,u=null,d=new Map,f=e=>{try{return!!e&&new URL(e,location.href).origin===location.origin}catch{return!1}},p=()=>{let e=Object.keys(s);if(e.length>20)for(let t of e.slice(0,e.length-20))delete s[t];try{sessionStorage.setItem(me,JSON.stringify(s))}catch{}},m=e=>{let t=s[e.sid];return t||(t=s[e.sid]={current:e.variants[0]?.index??1,display:e.display,params:{}},p()),e.variants.length&&!e.variants.some(e=>e.index===t.current)&&t.current!==0&&(t.current=e.variants[0].index),t},h=e=>t.send({type:`ph:live`,request:e}),g=e=>{let n=m(e);t.send({type:`ph:live-view`,sid:e.sid,current:n.current,display:n.display})},_=G(`div`,{class:`lv-root`});t.layer.appendChild(_);let v=G(`div`),y=G(`div`);_.append(y,v);let b=null,x=()=>{if(b?.remove(),b=null,!a)return;t.patchMode()&&(o=`select`);let e=G(`div`,{class:`lv-seg`});e.append(K(r.modeSelect,()=>(o=`select`,x()),o===`select`?`on`:``)),t.patchMode()||e.append(K(r.modeInsert,()=>(o=`insert`,x()),o===`insert`?`on`:``));let n=G(`input`,{placeholder:r.steerPlaceholder}),i=K(r.steerGo,()=>{let e=n.value.trim();if(!e)return n.focus();h({op:`steer`,prompt:e,count:3,display:`inplace`,url:location.href,scope:`page`}),n.value=``,t.setPicking(!1)},`primary`);n.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.isComposing&&i.click()}),b=G(`div`,{class:`lv-card lv-pickbar`},e,n,i),_.appendChild(b)},S=null,C=()=>{S?.remove(),S=null},w=(e,t,n=!0)=>{let r=e.offsetWidth||300,i=e.offsetHeight||40,a=Math.min(Math.max(8,t.left),innerWidth-r-8),o=n?t.bottom+8:t.top-i-8;o+i>innerHeight-8&&(o=t.top-i-8),o<8&&(o=Math.min(innerHeight-i-8,t.bottom+8)),o<8&&(o=8),a=Math.max(8,a),e.style.left=`${a}px`,e.style.top=`${o}px`},T=e=>{let t=e.closest(`[data-ph-live]`);if(!t)return!1;let n=t.getAttribute(`data-ph-live`);return i.some(e=>e.sid===n&&e.status!==`accepted`&&e.status!==`discarded`)},E=e=>{if(C(),T(e))return t.toast(`warn`,r.blockedNested),!0;if(o!==`insert`||t.patchMode())return!1;let n=e.getBoundingClientRect();return S=G(`div`,{class:`lv-card lv-pop`},K(r.before,()=>(C(),P(e,`before`))),K(r.after,()=>(C(),P(e,`after`))),K(`✕`,C)),_.appendChild(S),w(S,n),!0},O=[],k=null,A=()=>{if(k?.remove(),k=null,!O.length||!M)return;k=G(`div`,{class:`lv-marks`});let e=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);for(let t of O)if(t.kind===`stroke`&&t.points){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`polyline`);n.setAttribute(`points`,t.points.map(e=>e.join(`,`)).join(` `)),n.setAttribute(`fill`,`none`),n.style.stroke=`var(--err)`,n.setAttribute(`stroke-width`,`3`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),e.appendChild(n)}k.appendChild(e);for(let e of O){let t=e.at??e.points?.[0];if(!t)continue;let n=G(`div`,{class:`lv-pin`},String(e.n));n.style.left=`${t[0]}px`,n.style.top=`${t[1]}px`,k.appendChild(n)}y.appendChild(k)},j=e=>{let n=new Set;t.setUiHidden(!0);try{let r=Math.max(1,Math.floor(e.length/6));for(let i=0;i<e.length;i+=r){let r=document.elementsFromPoint(e[i][0],e[i][1]).find(e=>!t.isOwn(e)&&e!==document.documentElement&&e!==document.body);if(r&&n.add(re(r)),n.size>=3)break}}finally{t.setUiHidden(!1)}return[...n]},ee=(e,t,n)=>{let i=G(`input`,{placeholder:r.notePlaceholder}),a=G(`div`,{class:`lv-card lv-note`},i,K(`✓`,()=>o(),`primary`)),o=()=>{t.note=i.value.trim()||void 0,a.remove(),n()};i.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.isComposing&&o(),e.key===`Escape`&&o()}),_.appendChild(a),a.style.left=`${Math.min(e[0]+14,innerWidth-236)}px`,a.style.top=`${Math.min(e[1]+14,innerHeight-50)}px`,i.focus()},te=(e,n)=>{if(O.length>=8)return t.toast(`warn`,r.maxMarks);let i=G(`div`,{class:`lv-draw`}),a=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`),o=document.createElementNS(`http://www.w3.org/2000/svg`,`polyline`);o.setAttribute(`fill`,`none`),o.style.stroke=`var(--err)`,o.setAttribute(`stroke-width`,`3`),a.appendChild(o),i.appendChild(a),i.tabIndex=-1,_.appendChild(i),i.focus({preventScroll:!0});let s=[],c=e=>{if(i.remove(),!e)return n();O.push(e),A(),ee(e.at??e.points[0],e,()=>{A(),n()})};if(i.addEventListener(`keydown`,e=>e.key===`Escape`&&c(null)),e===`pin`){i.addEventListener(`click`,e=>{let t=[e.clientX,e.clientY];c({n:O.length+1,kind:`pin`,at:t,targets:j([t])})});return}i.addEventListener(`pointerdown`,e=>{i.setPointerCapture(e.pointerId),s.push([e.clientX,e.clientY]);let t=e=>{s.push([e.clientX,e.clientY]),o.setAttribute(`points`,s.map(e=>e.join(`,`)).join(` `))};i.addEventListener(`pointermove`,t),i.addEventListener(`pointerup`,()=>{if(i.removeEventListener(`pointermove`,t),s.length<3)return c(null);let e=s.filter((e,t)=>t%2==0).slice(0,200);c({n:O.length+1,kind:`stroke`,points:e,targets:j(e)})},{once:!0})})},M=null,N=()=>{M?.remove(),M=null,O=[],A()},P=(n,i)=>{N(),t.setPicking(!1);let a=ie(n),o=i?`freeform`:`polish`,s=3,c=`inplace`,l=G(`div`,{class:`lv-card lv-design`}),u=G(`h4`,{},r.designTitle,G(`span`,{class:`sp`}),K(`✕`,N,`ghost icon`)),d=G(`div`,{class:`lv-target`,title:a.selector},`${i?`${i===`before`?r.before:r.after} · `:``}<${a.tagName.toLowerCase()}> ${L(a.text||a.selector,60)}`),f=G(`div`,{class:`lv-actions`}),p=()=>{f.replaceChildren(...e.map(e=>K(r.actions[e]??e,()=>(o=e,p()),e===o?`on`:``)))};i||p();let m=G(`textarea`,{placeholder:i?r.insertPlaceholder:r.promptPlaceholder,rows:`3`});m.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&!e.isComposing&&S()});let g=G(`span`,{class:`sp`}),v=()=>g.textContent=O.length?`${O.length}/8`:``,y=G(`div`,{class:`lv-row`},G(`label`,{},r.marks),K(r.draw,()=>te(`stroke`,v)),K(r.pin,()=>te(`pin`,v)),g,K(r.undo,()=>(O.pop(),A(),v()),`ghost`),K(r.clear,()=>(O=[],A(),v()),`ghost`)),b=G(`div`,{class:`lv-row`}),x=()=>{let e=G(`div`,{class:`lv-seg`},...[2,3,4].map(e=>K(String(e),()=>(s=e,x()),e===s?`on`:``)));if(t.patchMode())return b.replaceChildren(G(`label`,{},r.count),e);let n=G(`div`,{class:`lv-seg`},K(r.inplace,()=>(c=`inplace`,x()),c===`inplace`?`on`:``),K(r.compare,()=>(c=`compare`,x()),c===`compare`?`on`:``));b.replaceChildren(G(`label`,{},r.count),e,G(`span`,{class:`sp`}),G(`label`,{},r.display),n)};x();let S=()=>{let e=m.value.trim();if(i&&!e)return m.focus();let t=i?{op:`insert`,target:a,position:i,prompt:e,count:s,display:c,marks:O.length?O:void 0,url:location.href,scope:`element`}:{op:`generate`,target:a,action:o,prompt:e||void 0,count:s,display:c,marks:O.length?O:void 0,url:location.href,scope:`element`};h(t),N()},C=G(`div`,{class:`lv-foot`},K(r.cancel,N),K(r.generate,S,`primary`));l.append(u,d),i||l.append(f),l.append(m,y,b,C),M=l,_.appendChild(l);let w=n.getBoundingClientRect(),T=w.right+12+l.offsetWidth<innerWidth;l.style.left=`${T?w.right+12:Math.max(12,w.left-l.offsetWidth-12)}px`,l.style.top=`${Math.max(12,Math.min(w.top,innerHeight-l.offsetHeight-12))}px`,(l.getBoundingClientRect().left<12||!T&&w.left-l.offsetWidth-12<12)&&(l.style.left=`${innerWidth-l.offsetWidth-12}px`,l.style.top=`12px`),m.focus()},F=e=>{if(!e)return``;try{let t=new URL(e,location.href);return t.pathname+t.search}catch{return e}},I=e=>!e.url||F(e.url)===location.pathname+location.search,R=e=>document.querySelector(`[data-ph-live="${CSS.escape(e)}"]`),z=e=>[...e.children].filter(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ph-variant`)),B=e=>Number(e.getAttribute(`data-ph-variant`)),oe=e=>{let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e){let e=a.getBoundingClientRect();(e.width||e.height)&&(t=Math.min(t,e.left),n=Math.min(n,e.top),r=Math.max(r,e.right),i=Math.max(i,e.bottom))}return t===1/0?null:new DOMRect(t,n,r-t,i-n)},V=e=>{if(!e)return[];try{let t=JSON.parse(e.getAttribute(`data-ph-params`)||`[]`);return Array.isArray(t)?t.filter(e=>e&&typeof e.name==`string`&&/^[\w-]+$/.test(e.name)).slice(0,6):[]}catch{return[]}},ce=(e,t)=>t[e.name]===void 0?e.type===`toggle`?e.default===!1||e.default===`false`||e.default===0?`0`:`1`:e.type===`steps`?String(e.default??e.options?.[0]??``):String(e.default??e.min??0):t[e.name],H=se(),U=e=>e.source===`patch`,W=new Map,de=(e,t,n)=>`${e}:${t}:${n.selector}:${JSON.stringify(n.patch)}`,q=e=>{let n=e=>t.isOwn(e),r=ne(e.selector,e.anchor,{isOwn:n,altTexts:e.patch.text===void 0?[]:[e.patch.text]})?.el??null;if(!r)try{r=[...document.querySelectorAll(e.selector)].find(e=>!n(e))??null}catch{}return r instanceof HTMLElement?r:null},ge=e=>{let t=m(e),n=I(e)&&(e.status===`ready`||e.status===`refining`),r=n&&!c&&!l,i=n?e.variants.find(e=>e.index===t.current):void 0,a=new Set(r&&i?i.changes?.map(t=>de(e.sid,i.index,t))??[]:[]);H.prune(t=>!t.startsWith(`${e.sid}:`)||a.has(t));let o=[];for(let t of i?.changes??[]){let n=r?H.ensure(de(e.sid,i.index,t),t.patch,()=>q(t)):q(t);n&&o.push(n)}return W.set(e.sid,o),o.length>0},_e=e=>H.prune(t=>!t.startsWith(`${e}:`)),ve=e=>U(e)?!!W.get(e.sid)?.length:!!R(e.sid),J=e=>{if(U(e))return ge(e);let t=R(e.sid);if(!t)return!1;let n=m(e),r=z(t),i=c||l;for(let t of r){let r=B(t),a;a=e.status===`accepted`||e.status===`discarded`||i?r===0:n.display===`compare`||r===n.current,t.hidden===a&&(t.hidden=!a)}let a=r.find(e=>B(e)===n.current),o=n.params[n.current]??{};for(let e of V(a)){let n=ce(e,o),r=e.type===`range`?`${n}${e.unit??``}`:n;t.style.getPropertyValue(`--ph-${e.name}`)!==r&&t.style.setProperty(`--ph-${e.name}`,r),t.getAttribute(`data-ph-param-${e.name}`)!==n&&t.setAttribute(`data-ph-param-${e.name}`,n)}return!0},ye=e=>{if(ae())return;let t=U(e)?null:R(e.sid);(U(e)?W.get(e.sid)?.[0]:t&&z(t).find(t=>B(t)===m(e).current))?.animate?.([{opacity:0,transform:`translateY(4px)`},{opacity:1,transform:`none`}],{duration:180,easing:`ease-out`})},Y=(e,t)=>{let n=m(e),r=e.variants.map(e=>e.index);r.length&&(n.current=r[(r.indexOf(n.current)+t+r.length)%r.length],n.display=`inplace`,p(),J(e),ye(e),g(e),X())},be=e=>{let t=m(e),n;if(U(e)){let r=e.variants.find(e=>e.index===t.current)?.changes??[],i=D(r),a=new Map,o=e=>{let t=r.find(t=>t.selector===e),n=t?q(t):null;return n?le(n):null};for(let e of i){let t=o(e);t&&a.set(e,ue(t))}_e(e.sid),W.delete(e.sid),n=[];for(let e of i){let t=o(e),r=t?ue(t):void 0,i=a.get(e);(r||i)&&n.push({selector:e,look:{beforeHtml:r,afterHtml:i}})}}h({op:`accept`,sid:e.sid,variant:t.current,params:t.params[t.current],looks:n})},xe=null,Se=(e,t)=>{xe?.remove();let n=R(e.sid),i=m(e),a=n?z(n).find(e=>B(e)===i.current):void 0,o=V(a);if(!o.length)return;let s=i.params[i.current]??={},c=G(`div`,{class:`lv-card lv-params`},G(`h4`,{},r.params));for(let t of o){let n=ce(t,s),r=G(`div`,{class:`p`}),i=G(`span`,{},t.type===`range`?`${n}${t.unit??``}`:n);r.append(G(`div`,{class:`h`},G(`span`,{},t.label||t.name),i));let a=n=>{s[t.name]=n,i.textContent=t.type===`range`?`${n}${t.unit??``}`:n,p(),J(e)};if(t.type===`range`){let e=G(`input`,{type:`range`,min:String(t.min??0),max:String(t.max??100),step:String(t.step??1),value:n});e.addEventListener(`input`,()=>a(e.value)),r.append(e)}else if(t.type===`steps`){let e=G(`div`,{class:`lv-seg`}),i=()=>e.replaceChildren(...(t.options??[]).map(e=>K(e,()=>(a(e),i()),(s[t.name]??n)===e?`on`:``)));i(),r.append(e)}else{let e=K(``,()=>{let r=(s[t.name]??n)===`1`?`0`:`1`;a(r),e.textContent=r===`1`?`ON`:`OFF`,e.classList.toggle(`on`,r===`1`)},n===`1`?`on`:``);e.textContent=n===`1`?`ON`:`OFF`,r.append(e)}c.append(r)}c.append(G(`div`,{class:`lv-foot`},K(`✓`,()=>(c.remove(),xe=null)))),xe=c,_.appendChild(c),w(c,t)},Ce=new Map,we=0,Te=new WeakMap,X=()=>{let e=new Map([...v.children].map(e=>[e.dataset.sid??``,e])),n=[];y.querySelectorAll(`.lv-shimmer, .lv-outline, .lv-badge`).forEach(e=>e.remove());let a=!1;for(let t of i){if(t.status===`accepted`||t.status===`discarded`)continue;let i=I(t),o=U(t),s=i&&!o?R(t.sid):null,_=i&&o?W.get(t.sid)??[]:[],b=o?_.length>0:!!s,x=m(t),S=s?z(s):[],C=S.filter(e=>!e.hidden),w=s?oe(C.length?C:S):_.length?oe(_):null;if(!w&&i&&t.target)try{let e=document.querySelector(t.target.selector);e&&(w=e.getBoundingClientRect())}catch{}let T=he.includes(t.status);if(T&&w){let e=G(`div`,{class:`lv-shimmer`});Object.assign(e.style,{left:`${w.left}px`,top:`${w.top}px`,width:`${w.width}px`,height:`${w.height}px`}),y.appendChild(e)}if(b&&t.status===`ready`&&(a=!0),s&&t.status===`ready`&&x.display===`compare`&&!c&&!l)for(let e of S){let n=B(e),i=e.getBoundingClientRect();if(!i.width&&!i.height)continue;let a=G(`div`,{class:`lv-outline`});Object.assign(a.style,{left:`${i.left-2}px`,top:`${i.top-2}px`,width:`${i.width+4}px`,height:`${i.height+4}px`});let o=n===0?r.original:t.variants.find(e=>e.index===n)?.label??`#${n}`,s=G(`div`,{class:`lv-badge`},`${n===0?``:`${n} · `}${o}`);Object.assign(s.style,{right:`${innerWidth-i.right+4}px`,top:`${Math.max(0,i.top+4)}px`}),s.addEventListener(`click`,()=>{n!==0&&(x.current=n,x.display=`inplace`,p(),J(t),g(t),X())}),y.append(a,s)}let E=G(`div`,{class:`lv-card lv-ctrl`,"data-sid":t.sid}),D=G(`span`,{class:`st ${T?`busy`:t.status===`failed`?`err`:``}`},r[`status_${t.status}`]??t.status);if(!i)E.append(D,G(`span`,{class:`msg`},r.otherRoute),K(r.goThere,()=>f(t.url)&&(location.href=t.url)),K(r.discard,()=>h({op:`discard`,sid:t.sid})));else if(t.status===`failed`)E.append(D,G(`span`,{class:`msg`,title:t.error??``},L(t.error??``,80)),K(r.retry,()=>h({op:`retry`,sid:t.sid}))),t.accepted!==void 0&&E.append(K(r.retryAccept,()=>h({op:`retry`,sid:t.sid,andAccept:!0}))),E.append(K(r.discard,()=>h({op:`discard`,sid:t.sid})));else if(T)E.append(D,G(`span`,{class:`lbl`},L(t.prompt||(t.action?r.actions[t.action]:``)||``,40))),(t.status===`generating`||t.status===`refining`)&&E.append(K(r.discard,()=>h({op:`discard`,sid:t.sid})));else if(t.status===`ready`&&!b){let e=d.get(t.sid)??Date.now();d.set(t.sid,e),Date.now()-e<4e3?(E.append(D),clearTimeout(we),we=window.setTimeout(X,4050-(Date.now()-e))):o?E.append(G(`span`,{class:`st err`},r.notFound),K(r.discard,()=>h({op:`discard`,sid:t.sid}))):E.append(G(`span`,{class:`st err`},r.notMounted),K(r.reload,()=>location.reload()),K(r.tellAgent,()=>h({op:`mount_failed`,sid:t.sid,url:location.href,reason:`wrapper [data-ph-live] not found in the DOM`})),K(r.discard,()=>h({op:`discard`,sid:t.sid})))}else if(t.status===`ready`&&b){d.delete(t.sid);let e=t.variants.length,n=t.variants.findIndex(e=>e.index===x.current),i=t.variants[n]?.label??``,a=K(r.original,()=>{});a.addEventListener(`pointerdown`,()=>(c=!0,J(t)));let s=()=>{c&&(c=!1,J(t),X())};a.addEventListener(`pointerup`,s),a.addEventListener(`pointerleave`,s),E.append(K(`‹`,()=>Y(t,-1),`icon`),G(`span`,{class:`idx`},`${n+1}/${e}`),K(`›`,()=>Y(t,1),`icon`),G(`span`,{class:`lbl`,title:i},i),a),o||E.append(x.display===`compare`?K(r.inplace,()=>(x.display=`inplace`,p(),J(t),g(t),X())):K(r.compare,()=>(x.display=`compare`,p(),J(t),g(t),X())));let l=S.find(e=>B(e)===x.current);V(l).length&&E.append(K(r.params,()=>Se(t,E.getBoundingClientRect())));let f=G(`input`,{placeholder:r.refinePlaceholder});f.value=Ce.get(t.sid)??``,f.addEventListener(`input`,()=>Ce.set(t.sid,f.value)),f.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.isComposing&&f.value.trim()&&(h({op:`refine`,sid:t.sid,variant:x.current,prompt:f.value.trim()}),Ce.delete(t.sid))}),f.addEventListener(`focus`,()=>u=t.sid),E.append(f,K(r.discard,()=>h({op:`discard`,sid:t.sid})),K(r.accept,()=>be(t),`primary`)),E.addEventListener(`pointerenter`,()=>u=t.sid)}else continue;E.dataset.v=`${t.updatedAt}:${c}:${l}`;let O=`${E.className}|${E.dataset.v}|${E.innerHTML}`,k=e.get(t.sid),A=k&&Te.get(k)===O?k:E;Te.set(A,O);let j=v.children[n.length];if(j!==A&&v.insertBefore(A,j??null),k&&k!==A&&k.remove(),n.push(A),w){let e=A.offsetWidth,t=Math.min(Math.max(8,w.right-e),innerWidth-e-8),n=w.top-A.offsetHeight-8;n<8&&(n=Math.min(w.bottom+8,innerHeight-A.offsetHeight-80)),A.style.left=`${t}px`,A.style.top=`${Math.max(8,n)}px`}else A.style.right=`16px`,A.style.bottom=`${72+n.length*44}px`}for(let e of[...v.children])n.includes(e)||e.remove();if(t.setEye(a),Z){let e=v.querySelector(`.lv-ctrl[data-sid="${Z.sid}"] input`);e&&(e.focus(),e.setSelectionRange(Z.pos,Z.pos))}},Z=null,Q=()=>{let e=t.root.activeElement,n=e?.closest?.(`.lv-ctrl`);Z=e&&n&&e.tagName===`INPUT`?{sid:n.dataset.sid,pos:e.selectionStart??0}:null,X(),Z=null},Ee=()=>{for(let e of i)I(e)&&J(e)},De=!1,$=()=>{De||(De=!0,requestAnimationFrame(()=>{De=!1,Ee(),Q()}))},Oe=new MutationObserver(e=>{e.every(e=>t.isOwn(e.target))||i.some(e=>e.status!==`accepted`&&e.status!==`discarded`)&&$()});Oe.observe(document.documentElement,{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:[`hidden`,`data-ph-live`,`data-ph-variant`,`style`,`src`]}),addEventListener(`scroll`,$,!0),addEventListener(`resize`,$);let ke=setInterval(()=>i.some(e=>e.status===`ready`||he.includes(e.status))&&$(),1e3),Ae=e=>{if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.composedPath()[0];if(t&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName))||t&&t!==document.body&&t!==document.documentElement&&!(t.closest?.(`.lv-ctrl`)||e.composedPath().some(e=>e instanceof Element&&e.classList?.contains(`lv-ctrl`))))return;let n=i.filter(e=>e.status===`ready`&&I(e)&&ve(e)),r=n.find(e=>e.sid===u)??n[n.length-1];if(r){if(e.key===`ArrowLeft`)Y(r,-1);else if(e.key===`ArrowRight`)Y(r,1);else if(e.key===`Enter`)be(r);else return;e.preventDefault(),e.stopPropagation()}};addEventListener(`keydown`,Ae,!0),window.__phLive={version:1,setSessions(e){let t=new Map(i.map(e=>[e.sid,e.status]));i=[...e].sort((e,t)=>e.createdAt-t.createdAt);let n=new Set(i.filter(e=>U(e)&&e.status!==`accepted`&&e.status!==`discarded`).map(e=>e.sid));H.prune(e=>n.has(e.slice(0,e.indexOf(`:`))));let r=new Set(i.filter(e=>e.status!==`accepted`&&e.status!==`discarded`).map(e=>e.sid));for(let e of[W,d,Ce])for(let t of[...e.keys()])r.has(t)||e.delete(t);for(let e of i)if(e.status===`ready`&&t.get(e.sid)!==`ready`){let t=m(e);e.variants.some(e=>e.index===t.current)||(t.current=e.variants[0]?.index??1),p(),u=e.sid}Ee(),Q()},nav(e,t,n){let r=i.find(t=>t.sid===e);if(!r)return;let a=m(r);t!==void 0&&(a.current=t),n&&(a.display=n),p(),J(r),ye(r),Q(),(U(r)?W.get(e)?.[0]:R(e))?.scrollIntoView?.({block:`nearest`,behavior:ae()?`auto`:`smooth`})},onPick:E,design:e=>P(e),setPicking(e){a=e,e||C(),x()},setLang(e){r=fe(e),x(),Q()},eye(e){e===`down`?c=!0:e===`up`?c=!1:l=!l,Ee(),Q()},dispose(){Oe.disconnect(),clearInterval(ke),removeEventListener(`scroll`,$,!0),removeEventListener(`resize`,$),removeEventListener(`keydown`,Ae,!0),H.prune(()=>!1),_.remove(),n.remove()}}}window.__phHost&&!window.__phLive&&q(window.__phHost)})();
|
|
64
|
+
`,ve=`ph:live-view`,ye=[`generating`,`refining`,`accepting`,`discarding`];function K(e,t={},...n){let r=document.createElement(e);for(let[e,n]of Object.entries(t))e===`class`?r.className=n:r.setAttribute(e,n);for(let e of n)r.append(e);return r}function q(e,t,n=``){let r=K(`button`,n?{class:n}:{},e);return r.addEventListener(`click`,e=>{e.stopPropagation(),t()}),r}function J(t){let n=document.createElement(`style`);n.textContent=_e,t.root.appendChild(n);let r=ge(t.lang()),i=[],a=!1,o=`select`,s={};try{s=JSON.parse(sessionStorage.getItem(ve)||`{}`)}catch{}let c=!1,l=!1,u=null,d=new Map,f=e=>{try{return!!e&&new URL(e,location.href).origin===location.origin}catch{return!1}},p=()=>{let e=Object.keys(s);if(e.length>20)for(let t of e.slice(0,e.length-20))delete s[t];try{sessionStorage.setItem(ve,JSON.stringify(s))}catch{}},m=e=>{let t=s[e.sid];return t||(t=s[e.sid]={current:e.variants[0]?.index??1,display:e.display,params:{}},p()),e.variants.length&&!e.variants.some(e=>e.index===t.current)&&t.current!==0&&(t.current=e.variants[0].index),t},h=e=>t.send({type:`ph:live`,request:e}),g=e=>{let n=m(e);t.send({type:`ph:live-view`,sid:e.sid,current:n.current,display:n.display})},_=K(`div`,{class:`lv-root`});t.layer.appendChild(_);let v=K(`div`),y=K(`div`);_.append(y,v);let b=null,x=()=>{if(b?.remove(),b=null,!a)return;t.patchMode()&&(o=`select`);let e=K(`div`,{class:`lv-seg`});e.append(q(r.modeSelect,()=>(o=`select`,x()),o===`select`?`on`:``)),t.patchMode()||e.append(q(r.modeInsert,()=>(o=`insert`,x()),o===`insert`?`on`:``));let n=K(`input`,{placeholder:r.steerPlaceholder}),i=q(r.steerGo,()=>{let e=n.value.trim();if(!e)return n.focus();h({op:`steer`,prompt:e,count:3,display:`inplace`,url:location.href,scope:`page`}),n.value=``,t.setPicking(!1)},`primary`);n.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.isComposing&&i.click()}),b=K(`div`,{class:`lv-card lv-pickbar`},e,n,i),_.appendChild(b)},S=null,C=null,w=()=>{S?.remove(),S=null,C?.(),C=null},T=(e,t,n=!0)=>{let r=e.offsetWidth||300,i=e.offsetHeight||40,a=Math.min(Math.max(8,t.left),innerWidth-r-8),o=n?t.bottom+8:t.top-i-8;o+i>innerHeight-8&&(o=t.top-i-8),o<8&&(o=Math.min(innerHeight-i-8,t.bottom+8)),o<8&&(o=8),a=Math.max(8,a),e.style.left=`${a}px`,e.style.top=`${o}px`},E=e=>{let t=e.closest(`[data-ph-live]`);if(!t)return!1;let n=t.getAttribute(`data-ph-live`);return i.some(e=>e.sid===n&&e.status!==`accepted`&&e.status!==`discarded`)},O=e=>{if(w(),E(e))return t.toast(`warn`,r.blockedNested),!0;if(o!==`insert`||t.patchMode())return!1;let n=e.getBoundingClientRect();S=K(`div`,{class:`lv-card lv-pop`},q(r.before,()=>(w(),L(e,`before`))),q(r.after,()=>(w(),L(e,`after`))),q(`✕`,w)),_.appendChild(S),T(S,n);let i=S;return C=se(()=>T(i,e.getBoundingClientRect()),[e]),!0},k=[],A=null,j=()=>{if(A?.remove(),A=null,!k.length||!N)return;A=K(`div`,{class:`lv-marks`});let e=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);for(let t of k)if(t.kind===`stroke`&&t.points){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`polyline`);n.setAttribute(`points`,t.points.map(e=>e.join(`,`)).join(` `)),n.setAttribute(`fill`,`none`),n.style.stroke=`var(--err)`,n.setAttribute(`stroke-width`,`3`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),e.appendChild(n)}A.appendChild(e);for(let e of k){let t=e.at??e.points?.[0];if(!t)continue;let n=K(`div`,{class:`lv-pin`},String(e.n));n.style.left=`${t[0]}px`,n.style.top=`${t[1]}px`,A.appendChild(n)}y.appendChild(A)},ee=e=>{let n=new Set;t.setUiHidden(!0);try{let r=Math.max(1,Math.floor(e.length/6));for(let i=0;i<e.length;i+=r){let r=document.elementsFromPoint(e[i][0],e[i][1]).find(e=>!t.isOwn(e)&&e!==document.documentElement&&e!==document.body);if(r&&n.add(ie(r)),n.size>=3)break}}finally{t.setUiHidden(!1)}return[...n]},te=(e,t,n)=>{let i=K(`input`,{placeholder:r.notePlaceholder}),a=K(`div`,{class:`lv-card lv-note`},i,q(`✓`,()=>o(),`primary`)),o=()=>{t.note=i.value.trim()||void 0,a.remove(),n()};i.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.isComposing&&o(),e.key===`Escape`&&o()}),_.appendChild(a),a.style.left=`${Math.min(e[0]+14,innerWidth-236)}px`,a.style.top=`${Math.min(e[1]+14,innerHeight-50)}px`,i.focus()},M=(e,n)=>{if(k.length>=8)return t.toast(`warn`,r.maxMarks);let i=K(`div`,{class:`lv-draw`}),a=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`),o=document.createElementNS(`http://www.w3.org/2000/svg`,`polyline`);o.setAttribute(`fill`,`none`),o.style.stroke=`var(--err)`,o.setAttribute(`stroke-width`,`3`),a.appendChild(o),i.appendChild(a),i.tabIndex=-1,_.appendChild(i),i.focus({preventScroll:!0});let s=[],c=e=>{if(i.remove(),!e)return n();k.push(e),j(),te(e.at??e.points[0],e,()=>{j(),n()})};if(i.addEventListener(`keydown`,e=>e.key===`Escape`&&c(null)),e===`pin`){i.addEventListener(`click`,e=>{let t=[e.clientX,e.clientY];c({n:k.length+1,kind:`pin`,at:t,targets:ee([t])})});return}i.addEventListener(`pointerdown`,e=>{i.setPointerCapture(e.pointerId),s.push([e.clientX,e.clientY]);let t=e=>{s.push([e.clientX,e.clientY]),o.setAttribute(`points`,s.map(e=>e.join(`,`)).join(` `))};i.addEventListener(`pointermove`,t),i.addEventListener(`pointerup`,()=>{if(i.removeEventListener(`pointermove`,t),s.length<3)return c(null);let e=s.filter((e,t)=>t%2==0).slice(0,200);c({n:k.length+1,kind:`stroke`,points:e,targets:ee(e)})},{once:!0})})},ne=()=>[...t.root.querySelectorAll(`.drawer, .dock`)].map(e=>e.getBoundingClientRect()).filter(e=>e.width&&e.height),N=null,P=null,F=()=>{N?.remove(),N=null,P?.(),P=null,k=[],j()},L=(n,i)=>{F(),t.setPicking(!1);let a=ce(n),o=i?`freeform`:`polish`,s=3,c=`inplace`,l=K(`div`,{class:`lv-card lv-design`}),u=K(`h4`,{},r.designTitle,K(`span`,{class:`sp`}),q(`✕`,F,`ghost icon`)),d=K(`div`,{class:`lv-target`,title:a.selector},...i?[K(`span`,{class:`pos`},i===`before`?r.before:r.after)]:[],K(`span`,{class:`tag`},a.tagName.toLowerCase()),K(`span`,{class:`txt`},I(a.text||a.selector,80))),f=K(`div`,{class:`lv-actions`}),p=()=>{f.replaceChildren(...e.map(e=>q(r.actions[e]??e,()=>(o=e,p()),e===o?`on`:``)))};i||p();let m=K(`textarea`,{placeholder:i?r.insertPlaceholder:r.promptPlaceholder,rows:`3`});m.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&!e.isComposing&&S()});let g=K(`span`,{class:`sp`}),v=()=>g.textContent=k.length?`${k.length}/8`:``,y=K(`div`,{class:`lv-row`},K(`label`,{},r.marks),q(r.draw,()=>M(`stroke`,v)),q(r.pin,()=>M(`pin`,v)),g,q(r.undo,()=>(k.pop(),j(),v()),`ghost`),q(r.clear,()=>(k=[],j(),v()),`ghost`)),b=K(`div`,{class:`lv-row`}),x=()=>{let e=K(`div`,{class:`lv-seg`},...[2,3,4].map(e=>q(String(e),()=>(s=e,x()),e===s?`on`:``)));if(t.patchMode())return b.replaceChildren(K(`label`,{},r.count),e);let n=K(`div`,{class:`lv-seg`},q(r.inplace,()=>(c=`inplace`,x()),c===`inplace`?`on`:``),q(r.compare,()=>(c=`compare`,x()),c===`compare`?`on`:``));b.replaceChildren(K(`label`,{},r.count),e,K(`span`,{class:`sp`}),K(`label`,{},r.display),n)};x();let S=()=>{let e=m.value.trim();if(i&&!e)return m.focus();let t=i?{op:`insert`,target:a,position:i,prompt:e,count:s,display:c,marks:k.length?k:void 0,url:location.href,scope:`element`}:{op:`generate`,target:a,action:o,prompt:e||void 0,count:s,display:c,marks:k.length?k:void 0,url:location.href,scope:`element`};h(t),F()},C=K(`div`,{class:`lv-foot`},q(r.cancel,F),q(r.generate,S,`primary`));l.append(u,d),i||l.append(f),l.append(m,y,b,C),N=l,_.appendChild(l);let w=()=>oe(l,n.getBoundingClientRect(),{avoid:ne()});w();let T=se(w,[n,l]),E=new MutationObserver(w),D=t.root.querySelector(`.drawer`);D&&E.observe(D,{attributes:!0,attributeFilter:[`style`,`hidden`]}),P=()=>(T(),E.disconnect()),m.focus()},ae=e=>{if(!e)return``;try{let t=new URL(e,location.href);return t.pathname+t.search}catch{return e}},R=e=>!e.url||ae(e.url)===location.pathname+location.search,z=e=>document.querySelector(`[data-ph-live="${CSS.escape(e)}"]`),B=e=>[...e.children].filter(e=>e instanceof HTMLElement&&e.hasAttribute(`data-ph-variant`)),V=e=>Number(e.getAttribute(`data-ph-variant`)),ue=e=>{let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e){let e=a.getBoundingClientRect();(e.width||e.height)&&(t=Math.min(t,e.left),n=Math.min(n,e.top),r=Math.max(r,e.right),i=Math.max(i,e.bottom))}return t===1/0?null:new DOMRect(t,n,r-t,i-n)},H=e=>{if(!e)return[];try{let t=JSON.parse(e.getAttribute(`data-ph-params`)||`[]`);return Array.isArray(t)?t.filter(e=>e&&typeof e.name==`string`&&/^[\w-]+$/.test(e.name)).slice(0,6):[]}catch{return[]}},fe=(e,t)=>t[e.name]===void 0?e.type===`toggle`?e.default===!1||e.default===`false`||e.default===0?`0`:`1`:e.type===`steps`?String(e.default??e.options?.[0]??``):String(e.default??e.min??0):t[e.name],U=de(),W=e=>e.source===`patch`,G=new Map,he=(e,t,n)=>`${e}:${t}:${n.selector}:${JSON.stringify(n.patch)}`,J=e=>{let n=e=>t.isOwn(e),r=re(e.selector,e.anchor,{isOwn:n,altTexts:e.patch.text===void 0?[]:[e.patch.text]})?.el??null;if(!r)try{r=[...document.querySelectorAll(e.selector)].find(e=>!n(e))??null}catch{}return r instanceof HTMLElement?r:null},be=e=>{let t=m(e),n=R(e)&&(e.status===`ready`||e.status===`refining`),r=n&&!c&&!l,i=n?e.variants.find(e=>e.index===t.current):void 0,a=new Set(r&&i?i.changes?.map(t=>he(e.sid,i.index,t))??[]:[]);U.prune(t=>!t.startsWith(`${e.sid}:`)||a.has(t));let o=[];for(let t of i?.changes??[]){let n=r?U.ensure(he(e.sid,i.index,t),t.patch,()=>J(t)):J(t);n&&o.push(n)}return G.set(e.sid,o),o.length>0},xe=e=>U.prune(t=>!t.startsWith(`${e}:`)),Se=e=>W(e)?!!G.get(e.sid)?.length:!!z(e.sid),Y=e=>{if(W(e))return be(e);let t=z(e.sid);if(!t)return!1;let n=m(e),r=B(t),i=c||l;for(let t of r){let r=V(t),a;a=e.status===`accepted`||e.status===`discarded`||i?r===0:n.display===`compare`||r===n.current,t.hidden===a&&(t.hidden=!a)}let a=r.find(e=>V(e)===n.current),o=n.params[n.current]??{};for(let e of H(a)){let n=fe(e,o),r=e.type===`range`?`${n}${e.unit??``}`:n;t.style.getPropertyValue(`--ph-${e.name}`)!==r&&t.style.setProperty(`--ph-${e.name}`,r),t.getAttribute(`data-ph-param-${e.name}`)!==n&&t.setAttribute(`data-ph-param-${e.name}`,n)}return!0},Ce=e=>{if(le())return;let t=W(e)?null:z(e.sid);(W(e)?G.get(e.sid)?.[0]:t&&B(t).find(t=>V(t)===m(e).current))?.animate?.([{opacity:0,transform:`translateY(4px)`},{opacity:1,transform:`none`}],{duration:180,easing:`ease-out`})},we=(e,t)=>{let n=m(e),r=e.variants.map(e=>e.index);r.length&&(n.current=r[(r.indexOf(n.current)+t+r.length)%r.length],n.display=`inplace`,p(),Y(e),Ce(e),g(e),X())},Te=e=>{let t=m(e),n;if(W(e)){let r=e.variants.find(e=>e.index===t.current)?.changes??[],i=D(r),a=new Map,o=e=>{let t=r.find(t=>t.selector===e),n=t?J(t):null;return n?pe(n):null};for(let e of i){let t=o(e);t&&a.set(e,me(t))}xe(e.sid),G.delete(e.sid),n=[];for(let e of i){let t=o(e),r=t?me(t):void 0,i=a.get(e);(r||i)&&n.push({selector:e,look:{beforeHtml:r,afterHtml:i}})}}h({op:`accept`,sid:e.sid,variant:t.current,params:t.params[t.current],looks:n})},Ee=null,De=(e,t)=>{Ee?.remove();let n=z(e.sid),i=m(e),a=n?B(n).find(e=>V(e)===i.current):void 0,o=H(a);if(!o.length)return;let s=i.params[i.current]??={},c=K(`div`,{class:`lv-card lv-params`},K(`h4`,{},r.params));for(let t of o){let n=fe(t,s),r=K(`div`,{class:`p`}),i=K(`span`,{},t.type===`range`?`${n}${t.unit??``}`:n);r.append(K(`div`,{class:`h`},K(`span`,{},t.label||t.name),i));let a=n=>{s[t.name]=n,i.textContent=t.type===`range`?`${n}${t.unit??``}`:n,p(),Y(e)};if(t.type===`range`){let e=K(`input`,{type:`range`,min:String(t.min??0),max:String(t.max??100),step:String(t.step??1),value:n});e.addEventListener(`input`,()=>a(e.value)),r.append(e)}else if(t.type===`steps`){let e=K(`div`,{class:`lv-seg`}),i=()=>e.replaceChildren(...(t.options??[]).map(e=>q(e,()=>(a(e),i()),(s[t.name]??n)===e?`on`:``)));i(),r.append(e)}else{let e=q(``,()=>{let r=(s[t.name]??n)===`1`?`0`:`1`;a(r),e.textContent=r===`1`?`ON`:`OFF`,e.classList.toggle(`on`,r===`1`)},n===`1`?`on`:``);e.textContent=n===`1`?`ON`:`OFF`,r.append(e)}c.append(r)}c.append(K(`div`,{class:`lv-foot`},q(`✓`,()=>(c.remove(),Ee=null)))),Ee=c,_.appendChild(c),T(c,t)},Oe=new Map,ke=0,Ae=new WeakMap,X=()=>{let e=new Map([...v.children].map(e=>[e.dataset.sid??``,e])),n=[];y.querySelectorAll(`.lv-shimmer, .lv-outline, .lv-badge`).forEach(e=>e.remove());let a=!1;for(let t of i){if(t.status===`accepted`||t.status===`discarded`)continue;let i=R(t),o=W(t),s=i&&!o?z(t.sid):null,_=i&&o?G.get(t.sid)??[]:[],b=o?_.length>0:!!s,x=m(t),S=s?B(s):[],C=S.filter(e=>!e.hidden),w=s?ue(C.length?C:S):_.length?ue(_):null;if(!w&&i&&t.target)try{let e=document.querySelector(t.target.selector);e&&(w=e.getBoundingClientRect())}catch{}let T=ye.includes(t.status);if(T&&w){let e=K(`div`,{class:`lv-shimmer`});Object.assign(e.style,{left:`${w.left}px`,top:`${w.top}px`,width:`${w.width}px`,height:`${w.height}px`}),y.appendChild(e)}if(b&&t.status===`ready`&&(a=!0),s&&t.status===`ready`&&x.display===`compare`&&!c&&!l)for(let e of S){let n=V(e),i=e.getBoundingClientRect();if(!i.width&&!i.height)continue;let a=K(`div`,{class:`lv-outline`});Object.assign(a.style,{left:`${i.left-2}px`,top:`${i.top-2}px`,width:`${i.width+4}px`,height:`${i.height+4}px`});let o=n===0?r.original:t.variants.find(e=>e.index===n)?.label??`#${n}`,s=K(`div`,{class:`lv-badge`},`${n===0?``:`${n} · `}${o}`);Object.assign(s.style,{right:`${innerWidth-i.right+4}px`,top:`${Math.max(0,i.top+4)}px`}),s.addEventListener(`click`,()=>{n!==0&&(x.current=n,x.display=`inplace`,p(),Y(t),g(t),X())}),y.append(a,s)}let E=K(`div`,{class:`lv-card lv-ctrl`,"data-sid":t.sid}),D=K(`span`,{class:`st ${T?`busy`:t.status===`failed`?`err`:``}`},r[`status_${t.status}`]??t.status);if(!i)E.append(D,K(`span`,{class:`msg`},r.otherRoute),q(r.goThere,()=>f(t.url)&&(location.href=t.url)),q(r.discard,()=>h({op:`discard`,sid:t.sid})));else if(t.status===`failed`)E.append(D,K(`span`,{class:`msg`,title:t.error??``},I(t.error??``,80)),q(r.retry,()=>h({op:`retry`,sid:t.sid}))),t.accepted!==void 0&&E.append(q(r.retryAccept,()=>h({op:`retry`,sid:t.sid,andAccept:!0}))),E.append(q(r.discard,()=>h({op:`discard`,sid:t.sid})));else if(T)E.append(D,K(`span`,{class:`lbl`},I(t.prompt||(t.action?r.actions[t.action]:``)||``,40))),(t.status===`generating`||t.status===`refining`)&&E.append(q(r.discard,()=>h({op:`discard`,sid:t.sid})));else if(t.status===`ready`&&!b){let e=d.get(t.sid)??Date.now();d.set(t.sid,e),Date.now()-e<4e3?(E.append(D),clearTimeout(ke),ke=window.setTimeout(X,4050-(Date.now()-e))):o?E.append(K(`span`,{class:`st err`},r.notFound),q(r.discard,()=>h({op:`discard`,sid:t.sid}))):E.append(K(`span`,{class:`st err`},r.notMounted),q(r.reload,()=>location.reload()),q(r.tellAgent,()=>h({op:`mount_failed`,sid:t.sid,url:location.href,reason:`wrapper [data-ph-live] not found in the DOM`})),q(r.discard,()=>h({op:`discard`,sid:t.sid})))}else if(t.status===`ready`&&b){d.delete(t.sid);let e=t.variants.length,n=t.variants.findIndex(e=>e.index===x.current),i=t.variants[n]?.label??``,a=q(r.original,()=>{});a.addEventListener(`pointerdown`,()=>(c=!0,Y(t)));let s=()=>{c&&(c=!1,Y(t),X())};a.addEventListener(`pointerup`,s),a.addEventListener(`pointerleave`,s),E.append(q(`‹`,()=>we(t,-1),`icon`),K(`span`,{class:`idx`},`${n+1}/${e}`),q(`›`,()=>we(t,1),`icon`),K(`span`,{class:`lbl`,title:i},i),a),o||E.append(x.display===`compare`?q(r.inplace,()=>(x.display=`inplace`,p(),Y(t),g(t),X())):q(r.compare,()=>(x.display=`compare`,p(),Y(t),g(t),X())));let l=S.find(e=>V(e)===x.current);H(l).length&&E.append(q(r.params,()=>De(t,E.getBoundingClientRect())));let f=K(`input`,{placeholder:r.refinePlaceholder});f.value=Oe.get(t.sid)??``,f.addEventListener(`input`,()=>Oe.set(t.sid,f.value)),f.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`&&!e.isComposing&&f.value.trim()&&(h({op:`refine`,sid:t.sid,variant:x.current,prompt:f.value.trim()}),Oe.delete(t.sid))}),f.addEventListener(`focus`,()=>u=t.sid),E.append(f,q(r.discard,()=>h({op:`discard`,sid:t.sid})),q(r.accept,()=>Te(t),`primary`)),E.addEventListener(`pointerenter`,()=>u=t.sid)}else continue;E.dataset.v=`${t.updatedAt}:${c}:${l}`;let O=`${E.className}|${E.dataset.v}|${E.innerHTML}`,k=e.get(t.sid),A=k&&Ae.get(k)===O?k:E;Ae.set(A,O);let j=v.children[n.length];if(j!==A&&v.insertBefore(A,j??null),k&&k!==A&&k.remove(),n.push(A),w){let e=A.offsetWidth,t=Math.min(Math.max(8,w.right-e),innerWidth-e-8),n=w.top-A.offsetHeight-8;n<8&&(n=Math.min(w.bottom+8,innerHeight-A.offsetHeight-80)),A.style.left=`${t}px`,A.style.top=`${Math.max(8,n)}px`}else A.style.right=`16px`,A.style.bottom=`${72+n.length*44}px`}for(let e of[...v.children])n.includes(e)||e.remove();if(t.setEye(a),Z){let e=v.querySelector(`.lv-ctrl[data-sid="${Z.sid}"] input`);e&&(e.focus(),e.setSelectionRange(Z.pos,Z.pos))}},Z=null,Q=()=>{let e=t.root.activeElement,n=e?.closest?.(`.lv-ctrl`);Z=e&&n&&e.tagName===`INPUT`?{sid:n.dataset.sid,pos:e.selectionStart??0}:null,X(),Z=null},je=()=>{for(let e of i)R(e)&&Y(e)},Me=!1,$=()=>{Me||(Me=!0,requestAnimationFrame(()=>{Me=!1,je(),Q()}))},Ne=new MutationObserver(e=>{e.every(e=>t.isOwn(e.target))||i.some(e=>e.status!==`accepted`&&e.status!==`discarded`)&&$()});Ne.observe(document.documentElement,{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:[`hidden`,`data-ph-live`,`data-ph-variant`,`style`,`src`]}),addEventListener(`scroll`,$,!0),addEventListener(`resize`,$);let Pe=setInterval(()=>i.some(e=>e.status===`ready`||ye.includes(e.status))&&$(),1e3),Fe=e=>{if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;let t=e.composedPath()[0];if(t&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName))||t&&t!==document.body&&t!==document.documentElement&&!(t.closest?.(`.lv-ctrl`)||e.composedPath().some(e=>e instanceof Element&&e.classList?.contains(`lv-ctrl`))))return;let n=i.filter(e=>e.status===`ready`&&R(e)&&Se(e)),r=n.find(e=>e.sid===u)??n[n.length-1];if(r){if(e.key===`ArrowLeft`)we(r,-1);else if(e.key===`ArrowRight`)we(r,1);else if(e.key===`Enter`)Te(r);else return;e.preventDefault(),e.stopPropagation()}};addEventListener(`keydown`,Fe,!0),window.__phLive={version:1,setSessions(e){let t=new Map(i.map(e=>[e.sid,e.status]));i=[...e].sort((e,t)=>e.createdAt-t.createdAt);let n=new Set(i.filter(e=>W(e)&&e.status!==`accepted`&&e.status!==`discarded`).map(e=>e.sid));U.prune(e=>n.has(e.slice(0,e.indexOf(`:`))));let r=new Set(i.filter(e=>e.status!==`accepted`&&e.status!==`discarded`).map(e=>e.sid));for(let e of[G,d,Oe])for(let t of[...e.keys()])r.has(t)||e.delete(t);for(let e of i)if(e.status===`ready`&&t.get(e.sid)!==`ready`){let t=m(e);e.variants.some(e=>e.index===t.current)||(t.current=e.variants[0]?.index??1),p(),u=e.sid}je(),Q()},nav(e,t,n){let r=i.find(t=>t.sid===e);if(!r)return;let a=m(r);t!==void 0&&(a.current=t),n&&(a.display=n),p(),Y(r),Ce(r),Q(),(W(r)?G.get(e)?.[0]:z(e))?.scrollIntoView?.({block:`nearest`,behavior:le()?`auto`:`smooth`})},onPick:O,design:e=>L(e),setPicking(e){a=e,e||w(),x()},setLang(e){r=ge(e),x(),Q()},eye(e){e===`down`?c=!0:e===`up`?c=!1:l=!l,je(),Q()},dispose(){Ne.disconnect(),clearInterval(Pe),removeEventListener(`scroll`,$,!0),removeEventListener(`resize`,$),removeEventListener(`keydown`,Fe,!0),U.prune(()=>!1),_.remove(),n.remove()}}}window.__phHost&&!window.__phLive&&J(window.__phHost)})();
|