diff mrjunejune/test/snapshots/jrpg.snapshot @ 272:41a49c29a28f

polish JRPG conversation experience Integrate desktop conversations into the utility panel, simplify the mobile frame, add modal destinations and a reusable Zenbu composer lab, and preserve explicit conversation resume behavior. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Fri, 07 Aug 2026 16:05:29 -0700
parents 056790c4fb0d
children e02e2036ef84
line wrap: on
line diff
--- a/mrjunejune/test/snapshots/jrpg.snapshot	Fri Aug 07 13:24:05 2026 -0700
+++ b/mrjunejune/test/snapshots/jrpg.snapshot	Fri Aug 07 16:05:29 2026 -0700
@@ -35,7 +35,9 @@
     <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))">
     <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)">
     <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image">
+    <link rel="stylesheet" href="/public/mjj-composer.css">
     <link rel="stylesheet" href="/jrpg/jrpg.css">
+    <script type="module" src="/public/mjj-composer.js"></script>
     <script type="module" src="/jrpg/jrpg.js"></script>
   </head>
   <body class="jrpg-page">
@@ -76,17 +78,61 @@
               </a>
             </zen-button>
           </nav>
-          <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs">
-            <button
-              type="button"
-              data-mobile-menu-toggle
-              aria-label="Toggle destination menu"
-              aria-expanded="true"
-              aria-controls="jrpg-destination-menu"
+          <zen-dialog
+            class="jrpg-mobile-destination-owner"
+            data-mobile-destination-owner
+          >
+            <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs">
+              <button
+                type="button"
+                data-zen-trigger
+                data-mobile-menu-toggle
+                aria-label="Open destination menu"
+              >
+                <zen-icon name="menu"></zen-icon>
+              </button>
+            </zen-button>
+            <dialog
+              class="jrpg-mobile-destination-dialog"
+              data-mobile-destination-dialog
+              aria-labelledby="jrpg-mobile-destination-title"
             >
-              <zen-icon name="menu"></zen-icon>
-            </button>
-          </zen-button>
+              <header class="jrpg-mobile-destination-header">
+                <zen-button
+                  appearance="plain"
+                  size="sm"
+                  data-mobile-destination-back-owner
+                  hidden
+                >
+                  <button
+                    type="button"
+                    data-mobile-destination-back
+                    aria-label="Back to destination menu"
+                  >
+                    <zen-icon name="chevron-left"></zen-icon>
+                    Menu
+                  </button>
+                </zen-button>
+                <h2
+                  id="jrpg-mobile-destination-title"
+                  data-mobile-destination-title
+                >Menu</h2>
+                <zen-button appearance="plain" size="sm">
+                  <button
+                    type="button"
+                    data-zen-close
+                    aria-label="Close destination menu"
+                  >
+                    <zen-icon name="close"></zen-icon>
+                  </button>
+                </zen-button>
+              </header>
+              <div
+                class="jrpg-mobile-destination-content"
+                data-mobile-destination-content
+              ></div>
+            </dialog>
+          </zen-dialog>
           <footer class="jrpg-frame-telemetry" aria-label="System telemetry">
             <span aria-label="Temperature unavailable">N/A</span>
             <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span>
@@ -99,10 +145,7 @@
               <img data-character alt="">
             </mjj-jrpg-character>
 
-            <mjj-jrpg-chat aria-labelledby="conversation-title">
-              <div class="jrpg-panel-heading">
-                <h1 id="conversation-title">Conversations</h1>
-              </div>
+            <mjj-jrpg-chat aria-label="Conversation">
               <zen-message-scroller>
                 <div
                   class="jrpg-message-viewport"
@@ -135,99 +178,98 @@
           <section class="jrpg-utility" aria-label="Selected destination">
             <mjj-jrpg-preview data-selection="resume">
               <article class="jrpg-preview-panel" aria-live="polite">
-                <zen-heading size="xl">
-                  <h2 data-preview-title>Resume</h2>
-                </zen-heading>
-                <p data-preview-copy>
-                  Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems.
-                </p>
-                <ul class="jrpg-work-showcase" data-work-showcase>
-                  <li>
-                    <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/">
-                      <span>Copilot Tasks</span>
-                      <small>Agentic execution</small>
-                    </a>
-                  </li>
-                  <li>
-                    <a href="https://www.cio.com/article/3977098/microsoft-doubles-down-on-multi-model-ai-as-it-builds-a-copilot-super-app.html">
-                      <span>Copilot SuperApp</span>
-                      <small>AI platform</small>
-                    </a>
-                  </li>
-                </ul>
-                <zen-dialog class="jrpg-preview-dialog">
-                  <zen-button appearance="plain" size="xs" data-dialog-trigger-owner hidden>
-                    <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button>
-                  </zen-button>
-                  <dialog class="jrpg-detail-dialog" aria-labelledby="jrpg-dialog-title">
-                    <div class="jrpg-dialog-heading">
-                      <p>DESTINATION DATA</p>
-                      <div class="jrpg-dialog-heading-actions">
-                        <zen-button appearance="plain" size="md">
-                          <a href="/resume" data-preview-link>
-                            Open page
-                            <zen-icon name="external"></zen-icon>
+                <div class="jrpg-preview-content" data-preview-content>
+                  <zen-heading size="xl">
+                    <h2 data-preview-title>Resume</h2>
+                  </zen-heading>
+                  <p data-preview-copy>
+                    Member of Technical Staff and engineering leader with 10+ years building AI agent platforms and production systems.
+                  </p>
+                  <ul class="jrpg-work-showcase" data-work-showcase>
+                    <li>
+                      <a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/2026/02/26/copilot-tasks-from-answers-to-actions/">
+                        <span>Copilot Tasks</span>
+                        <small>Agentic execution</small>
+                      </a>
+                    </li>
+                    <li>
+                      <a href="https://www.cio.com/article/3977098/microsoft-doubles-down-on-multi-model-ai-as-it-builds-a-copilot-super-app.html">
+                        <span>Copilot SuperApp</span>
+                        <small>AI platform</small>
+                      </a>
+                    </li>
+                  </ul>
+                  <zen-dialog class="jrpg-preview-dialog">
+                    <zen-button appearance="plain" size="xs" data-dialog-trigger-owner hidden>
+                      <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button>
+                    </zen-button>
+                    <dialog class="jrpg-detail-dialog" aria-labelledby="jrpg-dialog-title">
+                      <div class="jrpg-dialog-heading">
+                        <p>DESTINATION DATA</p>
+                        <div class="jrpg-dialog-heading-actions">
+                          <zen-button appearance="plain" size="md">
+                            <a href="/resume" data-preview-link>
+                              Open page
+                              <zen-icon name="external"></zen-icon>
+                            </a>
+                          </zen-button>
+                          <zen-button appearance="plain" size="md">
+                            <button type="button" data-zen-close aria-label="Close destination details">
+                              <zen-icon name="close"></zen-icon>
+                            </button>
+                          </zen-button>
+                        </div>
+                      </div>
+                      <h2 id="jrpg-dialog-title" data-dialog-title>Resume</h2>
+                      <p data-dialog-copy>Experience, projects, and the systems I have helped build.</p>
+                      <section
+                        class="jrpg-resume-dossier"
+                        data-resume-dossier
+                        aria-label="Resume dossier"
+                      >
+                        <p data-resume-status>Loading resume dossier...</p>
+                        <div data-resume-content></div>
+                      </section>
+                      <section
+                        class="jrpg-blog-browser"
+                        data-blog-browser
+                        aria-label="Blog archive"
+                        hidden
+                      >
+                        <aside>
+                          <h3>All blogs</h3>
+                          <ol data-blog-list>
+                            <li>Loading blog archive...</li>
+                          </ol>
+                        </aside>
+                        <article>
+                          <p data-blog-status>Select a blog to inspect.</p>
+                          <div data-blog-content></div>
+                        </article>
+                      </section>
+                      <section
+                        class="jrpg-tool-browser"
+                        data-tool-browser
+                        aria-label="Tool workspace"
+                        hidden
+                      >
+                        <article>
+                          <p data-tool-status>Select a tool to inspect.</p>
+                          <div data-tool-content></div>
+                        </article>
+                      </section>
+                      <div class="jrpg-dialog-actions" data-dialog-actions>
+                        <zen-button appearance="plain" size="lg" data-resume-download>
+                          <a href="/public/resume.pdf">
+                            Download PDF
+                            <zen-icon name="download"></zen-icon>
                           </a>
                         </zen-button>
-                        <zen-button appearance="plain" size="md">
-                          <button type="button" data-zen-close aria-label="Close destination details">
-                            <zen-icon name="close"></zen-icon>
-                          </button>
-                        </zen-button>
                       </div>
-                    </div>
-                    <h2 id="jrpg-dialog-title" data-dialog-title>Resume</h2>
-                    <p data-dialog-copy>Experience, projects, and the systems I have helped build.</p>
-                    <section
-                      class="jrpg-resume-dossier"
-                      data-resume-dossier
-                      aria-label="Resume dossier"
-                    >
-                      <p data-resume-status>Loading resume dossier...</p>
-                      <div data-resume-content></div>
-                    </section>
-                    <section
-                      class="jrpg-blog-browser"
-                      data-blog-browser
-                      aria-label="Blog archive"
-                      hidden
-                    >
-                      <aside>
-                        <h3>All blogs</h3>
-                        <ol data-blog-list>
-                          <li>Loading blog archive...</li>
-                        </ol>
-                      </aside>
-                      <article>
-                        <p data-blog-status>Select a blog to inspect.</p>
-                        <div data-blog-content></div>
-                      </article>
-                    </section>
-                    <section
-                      class="jrpg-tool-browser"
-                      data-tool-browser
-                      aria-label="Tool workspace"
-                      hidden
-                    >
-                      <article>
-                        <p data-tool-status>Select a tool to inspect.</p>
-                        <div data-tool-content></div>
-                      </article>
-                    </section>
-                    <div class="jrpg-dialog-actions" data-dialog-actions>
-                      <zen-button appearance="plain" size="lg" data-resume-download>
-                        <a href="/public/resume.pdf">
-                          Download PDF
-                          <zen-icon name="download"></zen-icon>
-                        </a>
-                      </zen-button>
-                    </div>
-                  </dialog>
-                </zen-dialog>
-              </article>
-            </mjj-jrpg-preview>
-
-            <mjj-conversation-archive hidden aria-label="Conversations">
+                    </dialog>
+                  </zen-dialog>
+                </div>
+                <mjj-conversation-archive hidden aria-label="Conversations">
               <div class="jrpg-archive-heading">
                 <h2>Archive</h2>
                 <zen-button appearance="plain" size="xs">
@@ -296,40 +338,62 @@
                   </div>
                 </form>
               </dialog>
-            </mjj-conversation-archive>
+                </mjj-conversation-archive>
+              </article>
+            </mjj-jrpg-preview>
           </section>
 
-          <mjj-jrpg-composer>
+          <mjj-composer compact>
             <form class="jrpg-composer" data-composer>
-              <zen-field appearance="plain" size="lg">
-                <label for="jrpg-message">Message</label>
-                <textarea
-                  id="jrpg-message"
-                  name="message"
-                  rows="3"
-                  maxlength="500"
-                  placeholder="Ask Epi about this site..."
-                  required
-                ></textarea>
-              </zen-field>
-              <div class="jrpg-composer-actions">
-                <zen-button appearance="plain" size="sm">
-                  <button type="submit">
-                    Send
-                    <zen-icon name="arrow-right"></zen-icon>
-                  </button>
-                </zen-button>
-                <zen-button appearance="plain" size="sm" data-cancel-control hidden>
-                  <button type="button" data-cancel>
-                    Cancel
-                    <zen-icon name="close"></zen-icon>
-                  </button>
-                </zen-button>
+              <div data-composer-control>
+                <zen-field size="lg">
+                  <label for="jrpg-message" data-composer-label>Message</label>
+                  <textarea
+                    id="jrpg-message"
+                    name="message"
+                    rows="3"
+                    maxlength="500"
+                    placeholder="Ask Epi about this site..."
+                    required
+                  ></textarea>
+                </zen-field>
+                <div class="jrpg-composer-actions" data-composer-actions>
+                  <zen-button size="sm">
+                    <button type="submit" aria-label="Send message">
+                      <span data-composer-action-label>Send</span>
+                      <zen-icon name="arrow-right"></zen-icon>
+                    </button>
+                  </zen-button>
+                  <zen-button
+                    size="sm"
+                    variant="danger"
+                    data-composer-cancel-owner
+                    hidden
+                  >
+                    <button
+                      type="button"
+                      data-composer-cancel
+                      aria-label="Cancel response"
+                    >
+                      <span data-composer-action-label>Cancel</span>
+                      <zen-icon name="close"></zen-icon>
+                    </button>
+                  </zen-button>
+                </div>
               </div>
-              <p class="jrpg-composer-quota" data-quota aria-live="polite" hidden></p>
-              <p class="jrpg-composer-hint">Enter to send / Shift + Enter for a new line</p>
+              <p
+                class="jrpg-composer-quota"
+                data-composer-meta
+                data-quota
+                aria-live="polite"
+                hidden
+              ></p>
+              <p
+                class="jrpg-composer-hint"
+                data-composer-meta
+              >Enter to send / Shift + Enter for a new line</p>
             </form>
-          </mjj-jrpg-composer>
+          </mjj-composer>
 
           <mjj-jrpg-menu id="jrpg-destination-menu">
             <nav aria-label="Shiba Quest destinations">