Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

neovim/.system/specs/NVIM-SPEC-GMWDCMJZ-pivi-native-neovim-integration/native-agent-trail.html

Raw
<section class="pivi-mockup">
  <style>
    :host { color-scheme: dark; font: 14px/1.35 ui-monospace, "Cascadia Mono", Consolas, monospace; }
    .pivi-mockup { max-width: 1120px; margin: 0 auto; color: #d7d7d7; background: #17191d; border: 1px solid #464b55; box-shadow: 0 10px 35px #0008; }
    .tabs, .winbar, .status { display: flex; align-items: center; min-height: 1.7em; padding: 0 .65em; white-space: pre; }
    .tabs { background: #242830; gap: 1.1em; color: #a9b0bc; }
    .tabs .active { color: #f0f0f0; background: #343945; margin: 0 -.4em; padding: 0 .4em; }
    .workspace { display: grid; grid-template-columns: minmax(0, 3fr) minmax(24em, 2fr); min-height: 29em; }
    .window { min-width: 0; position: relative; }
    .window + .window { border-left: 1px solid #464b55; }
    .winbar { justify-content: space-between; background: #202329; color: #bfc5cf; border-bottom: 1px solid #30343c; }
    .agent { color: #deb887; }
    .buffer { padding: .45em 0 1em; overflow: hidden; }
    .line { display: grid; grid-template-columns: 2em 1.2em minmax(0, 1fr); min-height: 1.45em; }
    .num { color: #636b78; text-align: right; padding-right: .45em; user-select: none; }
    .sign { color: #7f8794; text-align: center; }
    .code { white-space: pre; overflow: hidden; }
    .kw { color: #d49adf; } .str { color: #e6c384; }
    .editing { background: #3a3223; }
    .editing .sign { color: #efbd6b; }
    .changed { background: #22352c; }
    .changed .sign { color: #8ec07c; }
    .virt { display: grid; grid-template-columns: 3.2em minmax(0, 1fr); color: #87b98b; background: #1c2923; }
    .virt::before { content: "+"; text-align: right; padding-right: .55em; color: #8ec07c; }
    .ghost { color: #98a1ad; font-style: italic; }
    .status { justify-content: space-between; background: #292d35; color: #ccd0d8; border-top: 1px solid #464b55; }
    .external { color: #89919e; }
    .controls { display: flex; gap: .5em; padding: .65em; border-top: 1px solid #343944; background: #202329; }
    button { font: inherit; color: #d7d7d7; background: #303540; border: 1px solid #565d69; padding: .3em .7em; }
    button[aria-pressed="true"] { border-color: #d7a85d; color: #f3c77b; }
    button:focus-visible { outline: 2px solid #9ccfd8; outline-offset: 2px; }
    .note { margin-left: auto; align-self: center; color: #7f8794; }
  </style>
  <div class="tabs"><span class="active">1 api</span><span>2 tests</span><span>3 docs</span><span class="agent">π refactor-parser</span></div>
  <div class="workspace">
    <article class="window">
      <header class="winbar"><span>lua/parser.lua</span><span>human workspace</span></header>
      <div class="buffer">
        <div class="line"><span class="num">38</span><span class="sign"> </span><span class="code"><span class="kw">local function</span> parse(input)</span></div>
        <div class="line"><span class="num">39</span><span class="sign"> </span><span class="code">  <span class="kw">local</span> tokens = tokenize(input)</span></div>
        <div class="line changed"><span class="num">40</span><span class="sign">┃</span><span class="code">  <span class="kw">return</span> parse_tokens(tokens)</span></div>
        <div class="line"><span class="num">41</span><span class="sign"> </span><span class="code"><span class="kw">end</span></span></div>
        <div class="line"><span class="num">42</span><span class="sign"> </span><span class="code"></span></div>
        <div class="line"><span class="num">43</span><span class="sign"> </span><span class="code"><span class="kw">return</span> { parse = parse }</span></div>
      </div>
    </article>
    <article class="window">
      <header class="winbar"><span>lua/tokenize.lua</span><span class="agent">π editing 17:19</span></header>
      <div class="buffer">
        <div class="line"><span class="num">15</span><span class="sign"> </span><span class="code"><span class="kw">local function</span> scan(input)</span></div>
        <div class="line"><span class="num">16</span><span class="sign"> </span><span class="code">  <span class="kw">local</span> result = {}</span></div>
        <div class="line editing"><span class="num">17</span><span class="sign">●</span><span class="code">  <span class="kw">for</span> token <span class="kw">in</span> input:gmatch(<span class="str">'%S+'</span>) <span class="kw">do</span> <span class="ghost">π editing…</span></span></div>
        <div class="virt"><span></span><span class="code">    result[#result + 1] = normalize(token)</span></div>
        <div class="line editing"><span class="num">18</span><span class="sign">│</span><span class="code">    result[#result + 1] = token</span></div>
        <div class="line editing"><span class="num">19</span><span class="sign">└</span><span class="code">  <span class="kw">end</span></span></div>
        <div class="line"><span class="num">20</span><span class="sign"> </span><span class="code">  <span class="kw">return</span> result</span></div>
        <div class="line"><span class="num">21</span><span class="sign"> </span><span class="code"><span class="kw">end</span></span></div>
      </div>
    </article>
  </div>
  <footer class="status"><span>NORMAL  lua/parser.lua</span><span class="external">existing user-owned statusline remains untouched</span><span>40:3</span></footer>
  <div class="controls" aria-label="Representative controls">
    <button type="button" data-follow aria-pressed="true">Follow: window</button>
    <button type="button" data-state aria-pressed="false">Show completed state</button>
    <span class="note">Illustrative interaction only</span>
  </div>
  <script>
    (() => {
      const root = document.currentScript.mockupRoot;
      const follow = root.querySelector('[data-follow]');
      const state = root.querySelector('[data-state]');
      follow.addEventListener('click', () => {
        const on = follow.getAttribute('aria-pressed') !== 'true';
        follow.setAttribute('aria-pressed', String(on));
        follow.textContent = on ? 'Follow: window' : 'Follow: off';
      });
      state.addEventListener('click', () => {
        const completed = state.getAttribute('aria-pressed') !== 'true';
        state.setAttribute('aria-pressed', String(completed));
        state.textContent = completed ? 'Show active state' : 'Show completed state';
        root.querySelectorAll('.editing').forEach((line) => {
          line.classList.toggle('editing', !completed);
          line.classList.toggle('changed', completed);
        });
        const winbar = root.querySelectorAll('.winbar')[1].lastElementChild;
        winbar.textContent = completed ? 'π edited 17:19' : 'π editing 17:19';
        const ghost = root.querySelector('.ghost');
        ghost.textContent = completed ? 'π changed' : 'π editing…';
      });
    })();
  </script>
</section>