opencode-sesh 2.1.2 → 2.1.3

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/dist/tui.js CHANGED
@@ -2163,9 +2163,27 @@ function SidebarSessions(props) {
2163
2163
  })();
2164
2164
  }
2165
2165
  const HOME_SESSION_LIMIT = 6;
2166
+ // Layout baseline: OpenCode 2.2.4. Re-check these assumptions and the matching
2167
+ // tests/tui-home.mjs fixture when upgrading OpenCode: the fixture mirrors the
2168
+ // host layout, so it cannot detect upstream layout changes on its own.
2169
+ // Sources pinned to that release:
2170
+ // https://github.com/anomalyco/opencode/blob/45898d0f8569225eb1ddb4ee13f8581b34dff311/packages/tui/src/routes/home.tsx
2171
+ // https://github.com/anomalyco/opencode/blob/45898d0f8569225eb1ddb4ee13f8581b34dff311/packages/tui/src/component/prompt/index.tsx#L1676
2172
+ // https://github.com/anomalyco/opencode/blob/45898d0f8569225eb1ddb4ee13f8581b34dff311/packages/tui/src/component/logo.tsx
2173
+ // https://github.com/anomalyco/opencode/blob/45898d0f8569225eb1ddb4ee13f8581b34dff311/packages/tui/src/feature-plugins/home/footer.tsx
2174
+ // The native home needs room for its logo, composer chrome and status footer.
2175
+ // Reserve the editor's *maximum* height (one third of the terminal, at least
2176
+ // six lines), so typing/wrapping a prompt cannot push it into our footer.
2177
+ // Chrome: logo (4) + gap (1) + composer (6) + status (3). Below 44 columns,
2178
+ // the logo stacks to seven lines but the three-line status footer disappears.
2179
+ const HOME_CHROME_ROWS = 14;
2166
2180
  function HomeSessions(props) {
2167
2181
  const theme = () => props.api.theme.current;
2168
2182
  const home = process.env.HOME ?? "";
2183
+ const [dimensions, setDimensions] = createSignal({
2184
+ width: props.api.renderer.width,
2185
+ height: props.api.renderer.height
2186
+ });
2169
2187
  const [entries, setEntries] = createSignal([]);
2170
2188
  const [query, setQuery] = createSignal("");
2171
2189
  const [hovered, setHovered] = createSignal();
@@ -2301,7 +2319,15 @@ function HomeSessions(props) {
2301
2319
  onMount(() => {
2302
2320
  ensureRootMouse(props.api.renderer);
2303
2321
  rootMouseHandlers.add(onRootMouseDown);
2304
- onCleanup(() => rootMouseHandlers.delete(onRootMouseDown));
2322
+ const resize = () => setDimensions({
2323
+ width: props.api.renderer.width,
2324
+ height: props.api.renderer.height
2325
+ });
2326
+ props.api.renderer.on("resize", resize);
2327
+ onCleanup(() => {
2328
+ rootMouseHandlers.delete(onRootMouseDown);
2329
+ props.api.renderer.off("resize", resize);
2330
+ });
2305
2331
  });
2306
2332
  const appendQuery = input => {
2307
2333
  if (input === "\b") setQuery(value => value.slice(0, -1));else setQuery(value => value + input);
@@ -2360,24 +2386,46 @@ function HomeSessions(props) {
2360
2386
  setEntries(snapshot.entries);
2361
2387
  setLoadFailed(snapshot.failed);
2362
2388
  })));
2363
- const visible = createMemo(() => {
2389
+ const filtered = createMemo(() => {
2364
2390
  const q = query().trim().toLowerCase();
2365
2391
  const list = q ? entries().filter(entry => entry.title.toLowerCase().includes(q) || entry.dir.toLowerCase().includes(q)) : entries();
2366
- return pinnedFirst(list, props.pins()).slice(0, HOME_SESSION_LIMIT);
2392
+ return pinnedFirst(list, props.pins());
2393
+ });
2394
+ const layout = createMemo(() => {
2395
+ const rows = dimensions().height;
2396
+ const budget = Math.max(0, rows - Math.max(6, Math.floor(rows / 3)) - HOME_CHROME_ROWS);
2397
+ // Drop decorative padding/spacing before sessions. Keep the full list in
2398
+ // the picker when even a heading and one session cannot fit.
2399
+ const padding = budget >= HOME_SESSION_LIMIT + 2 ? 1 : 0;
2400
+ const limit = Math.min(HOME_SESSION_LIMIT, Math.max(0, budget - padding - 1));
2401
+ const count = Math.max(1, Math.min(filtered().length, limit));
2402
+ return {
2403
+ budget,
2404
+ limit,
2405
+ padding,
2406
+ gap: budget >= 1 + padding + count * 2 ? 1 : 0
2407
+ };
2408
+ });
2409
+ const visible = createMemo(() => filtered().slice(0, layout().limit));
2410
+ createEffect(() => {
2411
+ const ids = new Set(visible().map(entry => entry.id));
2412
+ if (hovered() && !ids.has(hovered())) setHovered(undefined);
2413
+ if (pendingDelete() && !ids.has(pendingDelete())) cancelDelete();
2414
+ if (layout().limit === 0) setSearching(false);
2367
2415
  });
2368
2416
  return (() => {
2369
2417
  var _el$49 = _$createElement("box"),
2370
2418
  _el$50 = _$createElement("box");
2371
2419
  _$insertNode(_el$49, _el$50);
2372
2420
  _$setProp(_el$49, "width", "100%");
2421
+ _$setProp(_el$49, "flexShrink", 0);
2422
+ _$setProp(_el$49, "overflow", "hidden");
2373
2423
  _$setProp(_el$49, "alignItems", "center");
2374
2424
  _$setProp(_el$50, "flexDirection", "column");
2375
2425
  _$setProp(_el$50, "width", "100%");
2376
2426
  _$setProp(_el$50, "maxWidth", 72);
2377
2427
  _$setProp(_el$50, "paddingLeft", 1);
2378
2428
  _$setProp(_el$50, "paddingRight", 1);
2379
- _$setProp(_el$50, "paddingTop", 1);
2380
- _$setProp(_el$50, "gap", 1);
2381
2429
  _$insert(_el$50, _$createComponent(Show, {
2382
2430
  get when() {
2383
2431
  return entries().length > 0;
@@ -2386,27 +2434,17 @@ function HomeSessions(props) {
2386
2434
  return (() => {
2387
2435
  var _el$64 = _$createElement("box"),
2388
2436
  _el$65 = _$createElement("text"),
2389
- _el$67 = _$createElement("text");
2437
+ _el$66 = _$createTextNode(`Recent sessions `);
2390
2438
  _$insertNode(_el$64, _el$65);
2391
- _$insertNode(_el$64, _el$67);
2392
- _$setProp(_el$64, "flexDirection", "row");
2393
- _$setProp(_el$64, "gap", 1);
2394
- _$insertNode(_el$65, _$createTextNode(`Recent sessions`));
2395
- _$insert(_el$67, () => loadFailed() ? "· list unavailable, will retry" : "· none yet, option+o to browse");
2396
- _$effect(_p$ => {
2397
- var _v$33 = {
2398
- fg: theme().textMuted
2399
- },
2400
- _v$34 = {
2401
- fg: theme().textMuted
2402
- };
2403
- _v$33 !== _p$.e && (_p$.e = _$setProp(_el$65, "style", _v$33, _p$.e));
2404
- _v$34 !== _p$.t && (_p$.t = _$setProp(_el$67, "style", _v$34, _p$.t));
2405
- return _p$;
2406
- }, {
2407
- e: undefined,
2408
- t: undefined
2409
- });
2439
+ _$setProp(_el$64, "height", 1);
2440
+ _$setProp(_el$64, "flexShrink", 0);
2441
+ _$insertNode(_el$65, _el$66);
2442
+ _$setProp(_el$65, "wrapMode", "none");
2443
+ _$setProp(_el$65, "overflow", "hidden");
2444
+ _$insert(_el$65, () => loadFailed() ? "· list unavailable, will retry" : "· none yet, option+o to browse", null);
2445
+ _$effect(_$p => _$setProp(_el$65, "style", {
2446
+ fg: theme().textMuted
2447
+ }, _$p));
2410
2448
  return _el$64;
2411
2449
  })();
2412
2450
  },
@@ -2415,23 +2453,40 @@ function HomeSessions(props) {
2415
2453
  var _el$51 = _$createElement("box"),
2416
2454
  _el$52 = _$createElement("box"),
2417
2455
  _el$53 = _$createElement("text"),
2418
- _el$55 = _$createElement("text"),
2419
2456
  _el$57 = _$createElement("box"),
2420
2457
  _el$58 = _$createElement("box"),
2421
2458
  _el$59 = _$createElement("text");
2422
2459
  _$insertNode(_el$51, _el$52);
2423
2460
  _$insertNode(_el$51, _el$57);
2461
+ _$setProp(_el$51, "height", 1);
2462
+ _$setProp(_el$51, "flexShrink", 0);
2424
2463
  _$setProp(_el$51, "flexDirection", "row");
2425
2464
  _$setProp(_el$51, "justifyContent", "space-between");
2426
2465
  _$setProp(_el$51, "gap", 2);
2466
+ _$setProp(_el$51, "overflow", "hidden");
2427
2467
  _$insertNode(_el$52, _el$53);
2428
- _$insertNode(_el$52, _el$55);
2429
2468
  _$setProp(_el$52, "flexDirection", "row");
2430
2469
  _$setProp(_el$52, "gap", 1);
2470
+ _$setProp(_el$52, "flexShrink", 0);
2431
2471
  _$insertNode(_el$53, _$createTextNode(`Recent sessions`));
2432
- _$insertNode(_el$55, _$createTextNode(`· option+o for all`));
2472
+ _$setProp(_el$53, "wrapMode", "none");
2473
+ _$insert(_el$52, _$createComponent(Show, {
2474
+ get when() {
2475
+ return dimensions().width >= 68;
2476
+ },
2477
+ get children() {
2478
+ var _el$55 = _$createElement("text");
2479
+ _$insertNode(_el$55, _$createTextNode(`· option+o for all`));
2480
+ _$effect(_$p => _$setProp(_el$55, "style", {
2481
+ fg: theme().textMuted
2482
+ }, _$p));
2483
+ return _el$55;
2484
+ }
2485
+ }), null);
2433
2486
  _$insertNode(_el$57, _el$58);
2434
2487
  _$setProp(_el$57, "flexDirection", "row");
2488
+ _$setProp(_el$57, "flexShrink", 1);
2489
+ _$setProp(_el$57, "minWidth", 0);
2435
2490
  _$setProp(_el$57, "gap", 1);
2436
2491
  _$setProp(_el$57, "paddingLeft", 1);
2437
2492
  _$setProp(_el$57, "paddingRight", 1);
@@ -2441,6 +2496,8 @@ function HomeSessions(props) {
2441
2496
  });
2442
2497
  _$insertNode(_el$58, _el$59);
2443
2498
  _$setProp(_el$58, "width", 24);
2499
+ _$setProp(_el$58, "flexShrink", 1);
2500
+ _$setProp(_el$58, "minWidth", 0);
2444
2501
  _$setProp(_el$59, "flexGrow", 1);
2445
2502
  _$setProp(_el$59, "flexShrink", 1);
2446
2503
  _$setProp(_el$59, "overflow", "hidden");
@@ -2466,23 +2523,18 @@ function HomeSessions(props) {
2466
2523
  var _v$29 = {
2467
2524
  fg: theme().textMuted
2468
2525
  },
2469
- _v$30 = {
2470
- fg: theme().textMuted
2471
- },
2472
- _v$31 = searching() ? theme().backgroundElement : RGBA.fromInts(0, 0, 0, 0),
2473
- _v$32 = {
2526
+ _v$30 = searching() ? theme().backgroundElement : RGBA.fromInts(0, 0, 0, 0),
2527
+ _v$31 = {
2474
2528
  fg: query() ? theme().text : theme().textMuted
2475
2529
  };
2476
2530
  _v$29 !== _p$.e && (_p$.e = _$setProp(_el$53, "style", _v$29, _p$.e));
2477
- _v$30 !== _p$.t && (_p$.t = _$setProp(_el$55, "style", _v$30, _p$.t));
2478
- _v$31 !== _p$.a && (_p$.a = _$setProp(_el$57, "backgroundColor", _v$31, _p$.a));
2479
- _v$32 !== _p$.o && (_p$.o = _$setProp(_el$59, "style", _v$32, _p$.o));
2531
+ _v$30 !== _p$.t && (_p$.t = _$setProp(_el$57, "backgroundColor", _v$30, _p$.t));
2532
+ _v$31 !== _p$.a && (_p$.a = _$setProp(_el$59, "style", _v$31, _p$.a));
2480
2533
  return _p$;
2481
2534
  }, {
2482
2535
  e: undefined,
2483
2536
  t: undefined,
2484
- a: undefined,
2485
- o: undefined
2537
+ a: undefined
2486
2538
  });
2487
2539
  return _el$51;
2488
2540
  })(), _$createComponent(For, {
@@ -2490,21 +2542,24 @@ function HomeSessions(props) {
2490
2542
  return visible();
2491
2543
  },
2492
2544
  children: entry => (() => {
2493
- var _el$68 = _$createElement("box"),
2494
- _el$69 = _$createElement("text"),
2495
- _el$71 = _$createElement("text");
2496
- _$insertNode(_el$68, _el$69);
2497
- _$insertNode(_el$68, _el$71);
2498
- _$setProp(_el$68, "flexDirection", "row");
2499
- _$setProp(_el$68, "gap", 1);
2500
- _$setProp(_el$68, "onMouseOver", () => setHovered(entry.id));
2501
- _$setProp(_el$68, "onMouseOut", () => setHovered(undefined));
2502
- _$setProp(_el$68, "onMouseDown", event => event.button === RIGHT_BUTTON ? openInCmuxWorkspace(props.api, entry) : props.api.route.navigate("session", {
2545
+ var _el$67 = _$createElement("box"),
2546
+ _el$68 = _$createElement("text"),
2547
+ _el$70 = _$createElement("text");
2548
+ _$insertNode(_el$67, _el$68);
2549
+ _$insertNode(_el$67, _el$70);
2550
+ _$setProp(_el$67, "height", 1);
2551
+ _$setProp(_el$67, "flexShrink", 0);
2552
+ _$setProp(_el$67, "overflow", "hidden");
2553
+ _$setProp(_el$67, "flexDirection", "row");
2554
+ _$setProp(_el$67, "gap", 1);
2555
+ _$setProp(_el$67, "onMouseOver", () => setHovered(entry.id));
2556
+ _$setProp(_el$67, "onMouseOut", () => setHovered(undefined));
2557
+ _$setProp(_el$67, "onMouseDown", event => event.button === RIGHT_BUTTON ? openInCmuxWorkspace(props.api, entry) : props.api.route.navigate("session", {
2503
2558
  sessionID: entry.id
2504
2559
  }));
2505
- _$insertNode(_el$69, _$createTextNode(`○`));
2506
- _$setProp(_el$69, "flexShrink", 0);
2507
- _$insert(_el$68, _$createComponent(Highlighted, {
2560
+ _$insertNode(_el$68, _$createTextNode(`○`));
2561
+ _$setProp(_el$68, "flexShrink", 0);
2562
+ _$insert(_el$67, _$createComponent(Highlighted, {
2508
2563
  get text() {
2509
2564
  return `${props.pins().sessions.includes(entry.id) ? "★ " : ""}${truncate(entry.title, HOME_TITLE_WIDTH - (props.pins().sessions.includes(entry.id) ? 2 : 0))}`;
2510
2565
  },
@@ -2517,30 +2572,35 @@ function HomeSessions(props) {
2517
2572
  get matchColor() {
2518
2573
  return theme().warning;
2519
2574
  }
2520
- }), _el$71);
2521
- _$setProp(_el$71, "flexShrink", 0);
2522
- _$insert(_el$71, (() => {
2575
+ }), _el$70);
2576
+ _$setProp(_el$70, "flexShrink", 1);
2577
+ _$setProp(_el$70, "wrapMode", "none");
2578
+ _$setProp(_el$70, "overflow", "hidden");
2579
+ _$insert(_el$70, (() => {
2523
2580
  var _c$5 = _$memo(() => pendingDelete() === entry.id);
2524
2581
  return () => _c$5() ? "option+d again" : `${props.pins().directories.includes(entry.dir) ? "★ " : ""}${prettyDir(entry.dir, home)} · ${ago(entry.updated)}`;
2525
2582
  })());
2526
2583
  _$effect(_p$ => {
2527
- var _v$35 = entry.id === hovered() ? theme().backgroundElement : RGBA.fromInts(0, 0, 0, 0),
2528
- _v$36 = {
2584
+ var _v$36 = entry.id === hovered() ? theme().backgroundElement : RGBA.fromInts(0, 0, 0, 0),
2585
+ _v$37 = {
2529
2586
  fg: theme().textMuted
2530
2587
  },
2531
- _v$37 = {
2588
+ _v$38 = Math.max(0, Math.floor((Math.min(72, dimensions().width) - 4) / 2)),
2589
+ _v$39 = {
2532
2590
  fg: pendingDelete() === entry.id ? theme().error : theme().textMuted
2533
2591
  };
2534
- _v$35 !== _p$.e && (_p$.e = _$setProp(_el$68, "backgroundColor", _v$35, _p$.e));
2535
- _v$36 !== _p$.t && (_p$.t = _$setProp(_el$69, "style", _v$36, _p$.t));
2536
- _v$37 !== _p$.a && (_p$.a = _$setProp(_el$71, "style", _v$37, _p$.a));
2592
+ _v$36 !== _p$.e && (_p$.e = _$setProp(_el$67, "backgroundColor", _v$36, _p$.e));
2593
+ _v$37 !== _p$.t && (_p$.t = _$setProp(_el$68, "style", _v$37, _p$.t));
2594
+ _v$38 !== _p$.a && (_p$.a = _$setProp(_el$70, "maxWidth", _v$38, _p$.a));
2595
+ _v$39 !== _p$.o && (_p$.o = _$setProp(_el$70, "style", _v$39, _p$.o));
2537
2596
  return _p$;
2538
2597
  }, {
2539
2598
  e: undefined,
2540
2599
  t: undefined,
2541
- a: undefined
2600
+ a: undefined,
2601
+ o: undefined
2542
2602
  });
2543
- return _el$68;
2603
+ return _el$67;
2544
2604
  })()
2545
2605
  }), _$createComponent(Show, {
2546
2606
  get when() {
@@ -2549,6 +2609,10 @@ function HomeSessions(props) {
2549
2609
  get children() {
2550
2610
  var _el$62 = _$createElement("text");
2551
2611
  _$insertNode(_el$62, _$createTextNode(`No title or directory matches · option+o to search transcripts`));
2612
+ _$setProp(_el$62, "height", 1);
2613
+ _$setProp(_el$62, "flexShrink", 0);
2614
+ _$setProp(_el$62, "wrapMode", "none");
2615
+ _$setProp(_el$62, "overflow", "hidden");
2552
2616
  _$effect(_$p => _$setProp(_el$62, "style", {
2553
2617
  fg: theme().textMuted
2554
2618
  }, _$p));
@@ -2557,6 +2621,22 @@ function HomeSessions(props) {
2557
2621
  })];
2558
2622
  }
2559
2623
  }));
2624
+ _$effect(_p$ => {
2625
+ var _v$32 = layout().limit > 0,
2626
+ _v$33 = layout().budget,
2627
+ _v$34 = layout().padding,
2628
+ _v$35 = layout().gap;
2629
+ _v$32 !== _p$.e && (_p$.e = _$setProp(_el$49, "visible", _v$32, _p$.e));
2630
+ _v$33 !== _p$.t && (_p$.t = _$setProp(_el$49, "maxHeight", _v$33, _p$.t));
2631
+ _v$34 !== _p$.a && (_p$.a = _$setProp(_el$50, "paddingTop", _v$34, _p$.a));
2632
+ _v$35 !== _p$.o && (_p$.o = _$setProp(_el$50, "gap", _v$35, _p$.o));
2633
+ return _p$;
2634
+ }, {
2635
+ e: undefined,
2636
+ t: undefined,
2637
+ a: undefined,
2638
+ o: undefined
2639
+ });
2560
2640
  return _el$49;
2561
2641
  })();
2562
2642
  }
@@ -3120,64 +3200,64 @@ const tui = async api => {
3120
3200
  if (previewTimer) clearTimeout(previewTimer);
3121
3201
  };
3122
3202
  api.ui.dialog.replace(() => (() => {
3123
- var _el$72 = _$createElement("box"),
3203
+ var _el$71 = _$createElement("box"),
3204
+ _el$72 = _$createElement("box"),
3124
3205
  _el$73 = _$createElement("box"),
3125
- _el$74 = _$createElement("box"),
3126
- _el$75 = _$createElement("text"),
3127
- _el$76 = _$createTextNode(`Sessions `),
3128
- _el$77 = _$createElement("span"),
3129
- _el$78 = _$createTextNode(`(`),
3130
- _el$79 = _$createTextNode(`)`),
3131
- _el$80 = _$createElement("text"),
3132
- _el$82 = _$createElement("box"),
3133
- _el$83 = _$createElement("input"),
3134
- _el$86 = _$createElement("box"),
3206
+ _el$74 = _$createElement("text"),
3207
+ _el$75 = _$createTextNode(`Sessions `),
3208
+ _el$76 = _$createElement("span"),
3209
+ _el$77 = _$createTextNode(`(`),
3210
+ _el$78 = _$createTextNode(`)`),
3211
+ _el$79 = _$createElement("text"),
3212
+ _el$81 = _$createElement("box"),
3213
+ _el$82 = _$createElement("input"),
3214
+ _el$85 = _$createElement("box"),
3215
+ _el$86 = _$createElement("text"),
3135
3216
  _el$87 = _$createElement("text"),
3136
3217
  _el$88 = _$createElement("text"),
3137
- _el$89 = _$createElement("text"),
3138
- _el$90 = _$createElement("box"),
3139
- _el$93 = _$createElement("box"),
3140
- _el$94 = _$createElement("text");
3218
+ _el$89 = _$createElement("box"),
3219
+ _el$92 = _$createElement("box"),
3220
+ _el$93 = _$createElement("text");
3221
+ _$insertNode(_el$71, _el$72);
3222
+ _$insertNode(_el$71, _el$89);
3223
+ _$insertNode(_el$71, _el$92);
3224
+ _$setProp(_el$71, "flexDirection", "column");
3225
+ _$setProp(_el$71, "paddingTop", 1);
3226
+ _$setProp(_el$71, "paddingBottom", 1);
3227
+ _$setProp(_el$71, "gap", 1);
3141
3228
  _$insertNode(_el$72, _el$73);
3142
- _$insertNode(_el$72, _el$90);
3143
- _$insertNode(_el$72, _el$93);
3144
- _$setProp(_el$72, "flexDirection", "column");
3145
- _$setProp(_el$72, "paddingTop", 1);
3146
- _$setProp(_el$72, "paddingBottom", 1);
3147
- _$setProp(_el$72, "gap", 1);
3229
+ _$insertNode(_el$72, _el$81);
3230
+ _$insertNode(_el$72, _el$85);
3231
+ _$setProp(_el$72, "paddingLeft", 4);
3232
+ _$setProp(_el$72, "paddingRight", 4);
3148
3233
  _$insertNode(_el$73, _el$74);
3149
- _$insertNode(_el$73, _el$82);
3150
- _$insertNode(_el$73, _el$86);
3151
- _$setProp(_el$73, "paddingLeft", 4);
3152
- _$setProp(_el$73, "paddingRight", 4);
3234
+ _$insertNode(_el$73, _el$79);
3235
+ _$setProp(_el$73, "flexDirection", "row");
3236
+ _$setProp(_el$73, "justifyContent", "space-between");
3153
3237
  _$insertNode(_el$74, _el$75);
3154
- _$insertNode(_el$74, _el$80);
3155
- _$setProp(_el$74, "flexDirection", "row");
3156
- _$setProp(_el$74, "justifyContent", "space-between");
3157
- _$insertNode(_el$75, _el$76);
3158
- _$insertNode(_el$75, _el$77);
3159
- _$insertNode(_el$77, _el$78);
3160
- _$insertNode(_el$77, _el$79);
3161
- _$insert(_el$77, () => selectableEntries().length, _el$79);
3162
- _$insertNode(_el$80, _$createTextNode(`esc`));
3163
- _$setProp(_el$80, "onMouseUp", close);
3164
- _$insertNode(_el$82, _el$83);
3165
- _$setProp(_el$82, "paddingTop", 1);
3166
- _$setProp(_el$83, "focused", true);
3167
- _$setProp(_el$83, "placeholder", "Search title, directory, transcript…");
3168
- _$setProp(_el$83, "cursorStyle", {
3238
+ _$insertNode(_el$74, _el$76);
3239
+ _$insertNode(_el$76, _el$77);
3240
+ _$insertNode(_el$76, _el$78);
3241
+ _$insert(_el$76, () => selectableEntries().length, _el$78);
3242
+ _$insertNode(_el$79, _$createTextNode(`esc`));
3243
+ _$setProp(_el$79, "onMouseUp", close);
3244
+ _$insertNode(_el$81, _el$82);
3245
+ _$setProp(_el$81, "paddingTop", 1);
3246
+ _$setProp(_el$82, "focused", true);
3247
+ _$setProp(_el$82, "placeholder", "Search title, directory, transcript…");
3248
+ _$setProp(_el$82, "cursorStyle", {
3169
3249
  style: "line",
3170
3250
  blinking: false
3171
3251
  });
3172
- _$setProp(_el$83, "onInput", value => {
3252
+ _$setProp(_el$82, "onInput", value => {
3173
3253
  if (pendingDelete()) return;
3174
3254
  setQuery(value);
3175
3255
  });
3176
- _$setProp(_el$83, "onSubmit", () => {
3256
+ _$setProp(_el$82, "onSubmit", () => {
3177
3257
  if (confirmArmed()) return;
3178
3258
  choose();
3179
3259
  });
3180
- _$setProp(_el$83, "onKeyDown", event => {
3260
+ _$setProp(_el$82, "onKeyDown", event => {
3181
3261
  if (event.name === "escape") {
3182
3262
  event.preventDefault();
3183
3263
  handleEscape();
@@ -3209,92 +3289,92 @@ const tui = async api => {
3209
3289
  }
3210
3290
  }
3211
3291
  });
3212
- _$insert(_el$73, _$createComponent(Show, {
3292
+ _$insert(_el$72, _$createComponent(Show, {
3213
3293
  get when() {
3214
3294
  return coverageLabel();
3215
3295
  },
3216
3296
  get children() {
3217
- var _el$84 = _$createElement("box"),
3218
- _el$85 = _$createElement("text");
3219
- _$insertNode(_el$84, _el$85);
3220
- _$setProp(_el$84, "paddingTop", 1);
3221
- _$insert(_el$85, coverageLabel);
3222
- _$effect(_$p => _$setProp(_el$85, "style", {
3297
+ var _el$83 = _$createElement("box"),
3298
+ _el$84 = _$createElement("text");
3299
+ _$insertNode(_el$83, _el$84);
3300
+ _$setProp(_el$83, "paddingTop", 1);
3301
+ _$insert(_el$84, coverageLabel);
3302
+ _$effect(_$p => _$setProp(_el$84, "style", {
3223
3303
  fg: api.theme.current.textMuted
3224
3304
  }, _$p));
3225
- return _el$84;
3305
+ return _el$83;
3226
3306
  }
3227
- }), _el$86);
3228
- _$insertNode(_el$86, _el$87);
3229
- _$insertNode(_el$86, _el$88);
3230
- _$insertNode(_el$86, _el$89);
3231
- _$setProp(_el$86, "flexDirection", "row");
3232
- _$setProp(_el$86, "gap", 2);
3233
- _$setProp(_el$86, "paddingTop", 1);
3234
- _$setProp(_el$87, "onMouseDown", () => {
3307
+ }), _el$85);
3308
+ _$insertNode(_el$85, _el$86);
3309
+ _$insertNode(_el$85, _el$87);
3310
+ _$insertNode(_el$85, _el$88);
3311
+ _$setProp(_el$85, "flexDirection", "row");
3312
+ _$setProp(_el$85, "gap", 2);
3313
+ _$setProp(_el$85, "paddingTop", 1);
3314
+ _$setProp(_el$86, "onMouseDown", () => {
3235
3315
  const group = currentProject();
3236
3316
  if (group) setScope(scope() === group ? undefined : group);else api.ui.toast({
3237
3317
  message: "No current project to filter",
3238
3318
  variant: "info"
3239
3319
  });
3240
3320
  });
3241
- _$insert(_el$87, (() => {
3321
+ _$insert(_el$86, (() => {
3242
3322
  var _c$6 = _$memo(() => !!scope());
3243
3323
  return () => _c$6() ? `Project: ${truncate(scope(), 22)}` : "Project: all";
3244
3324
  })());
3245
- _$setProp(_el$88, "onMouseDown", () => setWaitingOnly(value => !value));
3246
- _$insert(_el$88, () => waitingOnly() ? "● Needs input" : "○ Needs input");
3247
- _$setProp(_el$89, "onMouseDown", () => setPinnedOnly(value => !value));
3248
- _$insert(_el$89, () => pinnedOnly() ? "★ Pinned" : "☆ Pinned");
3249
- _$setProp(_el$90, "flexDirection", "column");
3250
- _$setProp(_el$90, "flexGrow", 1);
3251
- _$setProp(_el$90, "overflow", "hidden");
3252
- _$setProp(_el$90, "onMouseScroll", event => {
3325
+ _$setProp(_el$87, "onMouseDown", () => setWaitingOnly(value => !value));
3326
+ _$insert(_el$87, () => waitingOnly() ? "● Needs input" : "○ Needs input");
3327
+ _$setProp(_el$88, "onMouseDown", () => setPinnedOnly(value => !value));
3328
+ _$insert(_el$88, () => pinnedOnly() ? "★ Pinned" : "☆ Pinned");
3329
+ _$setProp(_el$89, "flexDirection", "column");
3330
+ _$setProp(_el$89, "flexGrow", 1);
3331
+ _$setProp(_el$89, "overflow", "hidden");
3332
+ _$setProp(_el$89, "onMouseScroll", event => {
3253
3333
  scrollPicker(event.scroll);
3254
3334
  });
3255
- _$insert(_el$90, _$createComponent(For, {
3335
+ _$insert(_el$89, _$createComponent(For, {
3256
3336
  get each() {
3257
3337
  return visiblePickerRows();
3258
3338
  },
3259
3339
  children: row => {
3260
3340
  if (row.kind === "group") return (() => {
3261
- var _el$107 = _$createElement("box"),
3341
+ var _el$106 = _$createElement("box"),
3342
+ _el$107 = _$createElement("text"),
3262
3343
  _el$108 = _$createElement("text"),
3263
- _el$109 = _$createElement("text"),
3264
- _el$110 = _$createTextNode(` (`),
3265
- _el$111 = _$createTextNode(`)`);
3266
- _$insertNode(_el$107, _el$108);
3267
- _$insertNode(_el$107, _el$109);
3268
- _$setProp(_el$107, "flexDirection", "row");
3269
- _$setProp(_el$107, "paddingLeft", 4);
3270
- _$setProp(_el$107, "paddingRight", 4);
3271
- _$setProp(_el$107, "onMouseDown", () => setCollapsed(state => ({
3344
+ _el$109 = _$createTextNode(` (`),
3345
+ _el$110 = _$createTextNode(`)`);
3346
+ _$insertNode(_el$106, _el$107);
3347
+ _$insertNode(_el$106, _el$108);
3348
+ _$setProp(_el$106, "flexDirection", "row");
3349
+ _$setProp(_el$106, "paddingLeft", 4);
3350
+ _$setProp(_el$106, "paddingRight", 4);
3351
+ _$setProp(_el$106, "onMouseDown", () => setCollapsed(state => ({
3272
3352
  ...state,
3273
3353
  [row.dir]: !state[row.dir]
3274
3354
  })));
3275
- _$setProp(_el$108, "flexGrow", 1);
3276
- _$setProp(_el$108, "flexShrink", 1);
3277
- _$setProp(_el$108, "wrapMode", "none");
3278
- _$insert(_el$108, () => collapsed()[row.dir] && !query().trim() ? "▸ " : "▾ ", null);
3279
- _$insert(_el$108, () => row.pinned ? "★ " : "", null);
3280
- _$insert(_el$108, () => row.label, null);
3281
- _$insertNode(_el$109, _el$110);
3282
- _$insertNode(_el$109, _el$111);
3283
- _$setProp(_el$109, "flexShrink", 0);
3284
- _$insert(_el$109, () => row.count, _el$111);
3355
+ _$setProp(_el$107, "flexGrow", 1);
3356
+ _$setProp(_el$107, "flexShrink", 1);
3357
+ _$setProp(_el$107, "wrapMode", "none");
3358
+ _$insert(_el$107, () => collapsed()[row.dir] && !query().trim() ? "▸ " : "▾ ", null);
3359
+ _$insert(_el$107, () => row.pinned ? "★ " : "", null);
3360
+ _$insert(_el$107, () => row.label, null);
3361
+ _$insertNode(_el$108, _el$109);
3362
+ _$insertNode(_el$108, _el$110);
3363
+ _$setProp(_el$108, "flexShrink", 0);
3364
+ _$insert(_el$108, () => row.count, _el$110);
3285
3365
  _$effect(_p$ => {
3286
- var _v$58 = row.continued ? 0 : 1,
3287
- _v$59 = {
3366
+ var _v$60 = row.continued ? 0 : 1,
3367
+ _v$61 = {
3288
3368
  fg: api.theme.current.accent
3289
3369
  },
3290
- _v$60 = TextAttributes.BOLD,
3291
- _v$61 = {
3370
+ _v$62 = TextAttributes.BOLD,
3371
+ _v$63 = {
3292
3372
  fg: api.theme.current.textMuted
3293
3373
  };
3294
- _v$58 !== _p$.e && (_p$.e = _$setProp(_el$107, "paddingTop", _v$58, _p$.e));
3295
- _v$59 !== _p$.t && (_p$.t = _$setProp(_el$108, "style", _v$59, _p$.t));
3296
- _v$60 !== _p$.a && (_p$.a = _$setProp(_el$108, "attributes", _v$60, _p$.a));
3297
- _v$61 !== _p$.o && (_p$.o = _$setProp(_el$109, "style", _v$61, _p$.o));
3374
+ _v$60 !== _p$.e && (_p$.e = _$setProp(_el$106, "paddingTop", _v$60, _p$.e));
3375
+ _v$61 !== _p$.t && (_p$.t = _$setProp(_el$107, "style", _v$61, _p$.t));
3376
+ _v$62 !== _p$.a && (_p$.a = _$setProp(_el$107, "attributes", _v$62, _p$.a));
3377
+ _v$63 !== _p$.o && (_p$.o = _$setProp(_el$108, "style", _v$63, _p$.o));
3298
3378
  return _p$;
3299
3379
  }, {
3300
3380
  e: undefined,
@@ -3302,46 +3382,46 @@ const tui = async api => {
3302
3382
  a: undefined,
3303
3383
  o: undefined
3304
3384
  });
3305
- return _el$107;
3385
+ return _el$106;
3306
3386
  })();
3307
3387
  const excerpt = createMemo(() => transcriptMatchExcerpt(searchIndex().get(row.entry.id), row.entry, query()));
3308
3388
  return (() => {
3309
- var _el$112 = _$createElement("box"),
3310
- _el$113 = _$createElement("box"),
3311
- _el$114 = _$createElement("text"),
3312
- _el$117 = _$createElement("text");
3313
- _$insertNode(_el$112, _el$113);
3314
- _$setProp(_el$112, "flexDirection", "column");
3315
- _$setProp(_el$112, "paddingLeft", 6);
3316
- _$setProp(_el$112, "paddingRight", 4);
3317
- _$setProp(_el$112, "onMouseMove", () => {
3389
+ var _el$111 = _$createElement("box"),
3390
+ _el$112 = _$createElement("box"),
3391
+ _el$113 = _$createElement("text"),
3392
+ _el$116 = _$createElement("text");
3393
+ _$insertNode(_el$111, _el$112);
3394
+ _$setProp(_el$111, "flexDirection", "column");
3395
+ _$setProp(_el$111, "paddingLeft", 6);
3396
+ _$setProp(_el$111, "paddingRight", 4);
3397
+ _$setProp(_el$111, "onMouseMove", () => {
3318
3398
  // Repainting under a stationary pointer must not select
3319
3399
  // another row while the wheel is moving the viewport.
3320
3400
  const index = selectableEntries().findIndex(entry => entry.id === row.entry.id);
3321
3401
  if (index >= 0) setCursor(index);
3322
3402
  });
3323
- _$setProp(_el$112, "onMouseDown", event => event.button === RIGHT_BUTTON ? (cleanup(), api.ui.dialog.clear(), openInCmuxWorkspace(api, row.entry)) : choose(row.entry));
3324
- _$insertNode(_el$113, _el$114);
3325
- _$insertNode(_el$113, _el$117);
3326
- _$setProp(_el$113, "flexDirection", "row");
3327
- _$setProp(_el$113, "gap", 1);
3328
- _$setProp(_el$114, "flexShrink", 0);
3329
- _$insert(_el$114, () => row.last ? "└" : "├");
3330
- _$insert(_el$113, _$createComponent(Show, {
3403
+ _$setProp(_el$111, "onMouseDown", event => event.button === RIGHT_BUTTON ? (cleanup(), api.ui.dialog.clear(), openInCmuxWorkspace(api, row.entry)) : choose(row.entry));
3404
+ _$insertNode(_el$112, _el$113);
3405
+ _$insertNode(_el$112, _el$116);
3406
+ _$setProp(_el$112, "flexDirection", "row");
3407
+ _$setProp(_el$112, "gap", 1);
3408
+ _$setProp(_el$113, "flexShrink", 0);
3409
+ _$insert(_el$113, () => row.last ? "└" : "├");
3410
+ _$insert(_el$112, _$createComponent(Show, {
3331
3411
  get when() {
3332
3412
  return row.entry.id === currentSessionID();
3333
3413
  },
3334
3414
  get children() {
3335
- var _el$115 = _$createElement("text");
3336
- _$insertNode(_el$115, _$createTextNode(`●`));
3337
- _$setProp(_el$115, "flexShrink", 0);
3338
- _$effect(_$p => _$setProp(_el$115, "style", {
3415
+ var _el$114 = _$createElement("text");
3416
+ _$insertNode(_el$114, _$createTextNode(`●`));
3417
+ _$setProp(_el$114, "flexShrink", 0);
3418
+ _$effect(_$p => _$setProp(_el$114, "style", {
3339
3419
  fg: row.entry.id === selectableEntries()[cursor()]?.id ? api.theme.current.text : api.theme.current.primary
3340
3420
  }, _$p));
3341
- return _el$115;
3421
+ return _el$114;
3342
3422
  }
3343
- }), _el$117);
3344
- _$insert(_el$113, _$createComponent(Highlighted, {
3423
+ }), _el$116);
3424
+ _$insert(_el$112, _$createComponent(Highlighted, {
3345
3425
  get text() {
3346
3426
  return `${pins().sessions.includes(row.entry.id) ? "★ " : ""}${truncate(row.entry.title, pins().sessions.includes(row.entry.id) ? 59 : 61)}`;
3347
3427
  },
@@ -3357,26 +3437,26 @@ const tui = async api => {
3357
3437
  get matchColor() {
3358
3438
  return _$memo(() => row.entry.id === selectableEntries()[cursor()]?.id)() ? api.theme.current.text : api.theme.current.warning;
3359
3439
  }
3360
- }), _el$117);
3361
- _$setProp(_el$117, "flexShrink", 0);
3362
- _$insert(_el$117, (() => {
3440
+ }), _el$116);
3441
+ _$setProp(_el$116, "flexShrink", 0);
3442
+ _$insert(_el$116, (() => {
3363
3443
  var _c$0 = _$memo(() => pendingDelete()?.id === row.entry.id);
3364
3444
  return () => _c$0() ? "press y to delete" : `${ago(row.entry.updated)}${query().trim() && !`${row.entry.title} ${row.entry.dir}`.toLowerCase().includes(query().trim().toLowerCase()) ? " · transcript match" : ""}`;
3365
3445
  })());
3366
- _$insert(_el$112, _$createComponent(Show, {
3446
+ _$insert(_el$111, _$createComponent(Show, {
3367
3447
  get when() {
3368
3448
  return excerpt();
3369
3449
  },
3370
3450
  children: match => (() => {
3371
- var _el$118 = _$createElement("box"),
3372
- _el$119 = _$createElement("text");
3373
- _$insertNode(_el$118, _el$119);
3374
- _$setProp(_el$118, "flexDirection", "row");
3375
- _$setProp(_el$118, "gap", 1);
3376
- _$setProp(_el$118, "paddingLeft", 2);
3377
- _$insertNode(_el$119, _$createTextNode(`↳`));
3378
- _$setProp(_el$119, "flexShrink", 0);
3379
- _$insert(_el$118, _$createComponent(Highlighted, {
3451
+ var _el$117 = _$createElement("box"),
3452
+ _el$118 = _$createElement("text");
3453
+ _$insertNode(_el$117, _el$118);
3454
+ _$setProp(_el$117, "flexDirection", "row");
3455
+ _$setProp(_el$117, "gap", 1);
3456
+ _$setProp(_el$117, "paddingLeft", 2);
3457
+ _$insertNode(_el$118, _$createTextNode(`↳`));
3458
+ _$setProp(_el$118, "flexShrink", 0);
3459
+ _$insert(_el$117, _$createComponent(Highlighted, {
3380
3460
  get text() {
3381
3461
  return match();
3382
3462
  },
@@ -3390,140 +3470,140 @@ const tui = async api => {
3390
3470
  return api.theme.current.warning;
3391
3471
  }
3392
3472
  }), null);
3393
- _$effect(_$p => _$setProp(_el$119, "style", {
3473
+ _$effect(_$p => _$setProp(_el$118, "style", {
3394
3474
  fg: api.theme.current.textMuted
3395
3475
  }, _$p));
3396
- return _el$118;
3476
+ return _el$117;
3397
3477
  })()
3398
3478
  }), null);
3399
3479
  _$effect(_p$ => {
3400
- var _v$62 = row.entry.id === selectableEntries()[cursor()]?.id ? api.theme.current.backgroundElement : RGBA.fromInts(0, 0, 0, 0),
3401
- _v$63 = {
3480
+ var _v$64 = row.entry.id === selectableEntries()[cursor()]?.id ? api.theme.current.backgroundElement : RGBA.fromInts(0, 0, 0, 0),
3481
+ _v$65 = {
3402
3482
  fg: row.entry.id === selectableEntries()[cursor()]?.id ? api.theme.current.text : api.theme.current.textMuted
3403
3483
  },
3404
- _v$64 = {
3484
+ _v$66 = {
3405
3485
  fg: pendingDelete()?.id === row.entry.id ? api.theme.current.error : row.entry.id === selectableEntries()[cursor()]?.id ? api.theme.current.text : api.theme.current.textMuted
3406
3486
  };
3407
- _v$62 !== _p$.e && (_p$.e = _$setProp(_el$112, "backgroundColor", _v$62, _p$.e));
3408
- _v$63 !== _p$.t && (_p$.t = _$setProp(_el$114, "style", _v$63, _p$.t));
3409
- _v$64 !== _p$.a && (_p$.a = _$setProp(_el$117, "style", _v$64, _p$.a));
3487
+ _v$64 !== _p$.e && (_p$.e = _$setProp(_el$111, "backgroundColor", _v$64, _p$.e));
3488
+ _v$65 !== _p$.t && (_p$.t = _$setProp(_el$113, "style", _v$65, _p$.t));
3489
+ _v$66 !== _p$.a && (_p$.a = _$setProp(_el$116, "style", _v$66, _p$.a));
3410
3490
  return _p$;
3411
3491
  }, {
3412
3492
  e: undefined,
3413
3493
  t: undefined,
3414
3494
  a: undefined
3415
3495
  });
3416
- return _el$112;
3496
+ return _el$111;
3417
3497
  })();
3418
3498
  }
3419
3499
  }), null);
3420
- _$insert(_el$90, _$createComponent(Show, {
3500
+ _$insert(_el$89, _$createComponent(Show, {
3421
3501
  get when() {
3422
3502
  return matchedGroups().length === 0;
3423
3503
  },
3424
3504
  get children() {
3425
- var _el$91 = _$createElement("box"),
3426
- _el$92 = _$createElement("text");
3427
- _$insertNode(_el$91, _el$92);
3428
- _$setProp(_el$91, "paddingLeft", 4);
3429
- _$setProp(_el$91, "paddingRight", 4);
3430
- _$insert(_el$92, (() => {
3505
+ var _el$90 = _$createElement("box"),
3506
+ _el$91 = _$createElement("text");
3507
+ _$insertNode(_el$90, _el$91);
3508
+ _$setProp(_el$90, "paddingLeft", 4);
3509
+ _$setProp(_el$90, "paddingRight", 4);
3510
+ _$insert(_el$91, (() => {
3431
3511
  var _c$7 = _$memo(() => !!(waitingOnly() && waitingCoverage() === "loading"));
3432
3512
  return () => _c$7() ? "Checking which sessions need input…" : _$memo(() => !!(waitingOnly() && waitingCoverage() === "unavailable"))() ? "Needs-input data unavailable · turn off the filter" : _$memo(() => !!(pinnedOnly() && pins().sessions.length === 0))() ? "No pinned sessions yet · ctrl+s pins a session" : _$memo(() => !!(!indexProgress().complete && query().trim()))() ? "No matches yet · still searching transcripts…" : _$memo(() => !!scope())() ? `No matches in ${scope()} · ctrl+g for all projects` : waitingOnly() ? "No sessions need input with these filters" : "No sessions match · try another search";
3433
3513
  })());
3434
- _$effect(_$p => _$setProp(_el$92, "style", {
3514
+ _$effect(_$p => _$setProp(_el$91, "style", {
3435
3515
  fg: api.theme.current.textMuted
3436
3516
  }, _$p));
3437
- return _el$91;
3517
+ return _el$90;
3438
3518
  }
3439
3519
  }), null);
3440
- _$insertNode(_el$93, _el$94);
3441
- _$setProp(_el$93, "paddingLeft", 4);
3442
- _$setProp(_el$93, "paddingRight", 4);
3443
- _$setProp(_el$93, "flexShrink", 0);
3444
- _$setProp(_el$93, "flexDirection", "column");
3445
- _$insert(_el$94, (() => {
3520
+ _$insertNode(_el$92, _el$93);
3521
+ _$setProp(_el$92, "paddingLeft", 4);
3522
+ _$setProp(_el$92, "paddingRight", 4);
3523
+ _$setProp(_el$92, "flexShrink", 0);
3524
+ _$setProp(_el$92, "flexDirection", "column");
3525
+ _$insert(_el$93, (() => {
3446
3526
  var _c$8 = _$memo(() => !!pendingDelete());
3447
3527
  return () => _c$8() ? `Delete "${truncate(pendingDelete().title, 40)}"? y confirm · n cancel` : "↑↓ move · enter open · ctrl+g project · option+w input · option+s pinned · option+p preview";
3448
3528
  })());
3449
- _$insert(_el$93, _$createComponent(Show, {
3529
+ _$insert(_el$92, _$createComponent(Show, {
3450
3530
  get when() {
3451
3531
  return !pendingDelete();
3452
3532
  },
3453
3533
  get children() {
3454
- var _el$95 = _$createElement("text");
3455
- _$insertNode(_el$95, _$createTextNode(`ctrl+s/d pin · option+d delete · ctrl+f fork · esc close`));
3456
- _$effect(_$p => _$setProp(_el$95, "style", {
3534
+ var _el$94 = _$createElement("text");
3535
+ _$insertNode(_el$94, _$createTextNode(`ctrl+s/d pin · option+d delete · ctrl+f fork · esc close`));
3536
+ _$effect(_$p => _$setProp(_el$94, "style", {
3457
3537
  fg: api.theme.current.textMuted
3458
3538
  }, _$p));
3459
- return _el$95;
3539
+ return _el$94;
3460
3540
  }
3461
3541
  }), null);
3462
- _$insert(_el$72, _$createComponent(Show, {
3542
+ _$insert(_el$71, _$createComponent(Show, {
3463
3543
  get when() {
3464
3544
  return showPreview();
3465
3545
  },
3466
3546
  get children() {
3467
- var _el$97 = _$createElement("box"),
3468
- _el$98 = _$createElement("box"),
3547
+ var _el$96 = _$createElement("box"),
3548
+ _el$97 = _$createElement("box"),
3549
+ _el$98 = _$createElement("text"),
3469
3550
  _el$99 = _$createElement("text"),
3470
- _el$100 = _$createElement("text"),
3471
- _el$104 = _$createElement("scrollbox"),
3472
- _el$105 = _$createElement("text");
3551
+ _el$103 = _$createElement("scrollbox"),
3552
+ _el$104 = _$createElement("text");
3553
+ _$insertNode(_el$96, _el$97);
3554
+ _$insertNode(_el$96, _el$103);
3555
+ _$insertNode(_el$96, _el$104);
3556
+ _$setProp(_el$96, "position", "absolute");
3557
+ _$setProp(_el$96, "left", 0);
3558
+ _$setProp(_el$96, "top", 0);
3559
+ _$setProp(_el$96, "width", dialogWidth);
3560
+ _$setProp(_el$96, "flexDirection", "column");
3561
+ _$setProp(_el$96, "paddingLeft", 4);
3562
+ _$setProp(_el$96, "paddingRight", 4);
3563
+ _$setProp(_el$96, "paddingTop", 1);
3564
+ _$setProp(_el$96, "paddingBottom", 1);
3565
+ _$setProp(_el$96, "gap", 1);
3473
3566
  _$insertNode(_el$97, _el$98);
3474
- _$insertNode(_el$97, _el$104);
3475
- _$insertNode(_el$97, _el$105);
3476
- _$setProp(_el$97, "position", "absolute");
3477
- _$setProp(_el$97, "left", 0);
3478
- _$setProp(_el$97, "top", 0);
3479
- _$setProp(_el$97, "width", dialogWidth);
3480
- _$setProp(_el$97, "flexDirection", "column");
3481
- _$setProp(_el$97, "paddingLeft", 4);
3482
- _$setProp(_el$97, "paddingRight", 4);
3483
- _$setProp(_el$97, "paddingTop", 1);
3484
- _$setProp(_el$97, "paddingBottom", 1);
3485
- _$setProp(_el$97, "gap", 1);
3486
- _$insertNode(_el$98, _el$99);
3487
- _$insertNode(_el$98, _el$100);
3488
- _$setProp(_el$98, "flexDirection", "row");
3489
- _$setProp(_el$98, "justifyContent", "space-between");
3490
- _$insert(_el$99, (() => {
3567
+ _$insertNode(_el$97, _el$99);
3568
+ _$setProp(_el$97, "flexDirection", "row");
3569
+ _$setProp(_el$97, "justifyContent", "space-between");
3570
+ _$insert(_el$98, (() => {
3491
3571
  var _c$9 = _$memo(() => !!previewID());
3492
3572
  return () => _c$9() ? truncate(selectableEntries()[cursor()].title, dialogWidth - 18) : "Preview";
3493
3573
  })());
3494
- _$insertNode(_el$100, _$createTextNode(`esc close`));
3495
- _$insert(_el$97, _$createComponent(Show, {
3574
+ _$insertNode(_el$99, _$createTextNode(`esc close`));
3575
+ _$insert(_el$96, _$createComponent(Show, {
3496
3576
  get when() {
3497
3577
  return previewID();
3498
3578
  },
3499
3579
  get children() {
3500
- var _el$102 = _$createElement("text"),
3501
- _el$103 = _$createTextNode(` · `);
3502
- _$insertNode(_el$102, _el$103);
3503
- _$insert(_el$102, () => prettyDir(selectableEntries()[cursor()].dir, process.env.HOME ?? ""), _el$103);
3504
- _$insert(_el$102, () => ago(selectableEntries()[cursor()].updated), null);
3505
- _$effect(_$p => _$setProp(_el$102, "style", {
3580
+ var _el$101 = _$createElement("text"),
3581
+ _el$102 = _$createTextNode(` · `);
3582
+ _$insertNode(_el$101, _el$102);
3583
+ _$insert(_el$101, () => prettyDir(selectableEntries()[cursor()].dir, process.env.HOME ?? ""), _el$102);
3584
+ _$insert(_el$101, () => ago(selectableEntries()[cursor()].updated), null);
3585
+ _$effect(_$p => _$setProp(_el$101, "style", {
3506
3586
  fg: api.theme.current.textMuted
3507
3587
  }, _$p));
3508
- return _el$102;
3588
+ return _el$101;
3509
3589
  }
3510
- }), _el$104);
3511
- _$setProp(_el$104, "flexGrow", 1);
3512
- _$setProp(_el$104, "scrollbarOptions", {
3590
+ }), _el$103);
3591
+ _$setProp(_el$103, "flexGrow", 1);
3592
+ _$setProp(_el$103, "scrollbarOptions", {
3513
3593
  visible: false
3514
3594
  });
3515
- _$insert(_el$104, _$createComponent(Show, {
3595
+ _$insert(_el$103, _$createComponent(Show, {
3516
3596
  get when() {
3517
3597
  return previewID();
3518
3598
  },
3519
3599
  get fallback() {
3520
3600
  return (() => {
3521
- var _el$121 = _$createElement("text");
3522
- _$insertNode(_el$121, _$createTextNode(`Select a session to preview`));
3523
- _$effect(_$p => _$setProp(_el$121, "style", {
3601
+ var _el$120 = _$createElement("text");
3602
+ _$insertNode(_el$120, _$createTextNode(`Select a session to preview`));
3603
+ _$effect(_$p => _$setProp(_el$120, "style", {
3524
3604
  fg: api.theme.current.textMuted
3525
3605
  }, _$p));
3526
- return _el$121;
3606
+ return _el$120;
3527
3607
  })();
3528
3608
  },
3529
3609
  get children() {
@@ -3533,55 +3613,55 @@ const tui = async api => {
3533
3613
  },
3534
3614
  get fallback() {
3535
3615
  return (() => {
3536
- var _el$123 = _$createElement("text");
3537
- _$insertNode(_el$123, _$createTextNode(`Loading…`));
3538
- _$effect(_$p => _$setProp(_el$123, "style", {
3616
+ var _el$122 = _$createElement("text");
3617
+ _$insertNode(_el$122, _$createTextNode(`Loading…`));
3618
+ _$effect(_$p => _$setProp(_el$122, "style", {
3539
3619
  fg: api.theme.current.textMuted
3540
3620
  }, _$p));
3541
- return _el$123;
3621
+ return _el$122;
3542
3622
  })();
3543
3623
  },
3544
3624
  children: text => getMarkdownStyle(api.theme.current, api.renderer?.nativeSession) ? (() => {
3545
- var _el$125 = _$createElement("markdown");
3625
+ var _el$124 = _$createElement("markdown");
3546
3626
  _$effect(_p$ => {
3547
- var _v$65 = text(),
3548
- _v$66 = getMarkdownStyle(api.theme.current, api.renderer?.nativeSession),
3549
- _v$67 = getTreeSitterClient();
3550
- _v$65 !== _p$.e && (_p$.e = _$setProp(_el$125, "content", _v$65, _p$.e));
3551
- _v$66 !== _p$.t && (_p$.t = _$setProp(_el$125, "syntaxStyle", _v$66, _p$.t));
3552
- _v$67 !== _p$.a && (_p$.a = _$setProp(_el$125, "treeSitterClient", _v$67, _p$.a));
3627
+ var _v$67 = text(),
3628
+ _v$68 = getMarkdownStyle(api.theme.current, api.renderer?.nativeSession),
3629
+ _v$69 = getTreeSitterClient();
3630
+ _v$67 !== _p$.e && (_p$.e = _$setProp(_el$124, "content", _v$67, _p$.e));
3631
+ _v$68 !== _p$.t && (_p$.t = _$setProp(_el$124, "syntaxStyle", _v$68, _p$.t));
3632
+ _v$69 !== _p$.a && (_p$.a = _$setProp(_el$124, "treeSitterClient", _v$69, _p$.a));
3553
3633
  return _p$;
3554
3634
  }, {
3555
3635
  e: undefined,
3556
3636
  t: undefined,
3557
3637
  a: undefined
3558
3638
  });
3559
- return _el$125;
3639
+ return _el$124;
3560
3640
  })() : (() => {
3561
- var _el$126 = _$createElement("text");
3562
- _$setProp(_el$126, "wrapMode", "word");
3563
- _$insert(_el$126, text);
3564
- return _el$126;
3641
+ var _el$125 = _$createElement("text");
3642
+ _$setProp(_el$125, "wrapMode", "word");
3643
+ _$insert(_el$125, text);
3644
+ return _el$125;
3565
3645
  })()
3566
3646
  });
3567
3647
  }
3568
3648
  }));
3569
- _$insertNode(_el$105, _$createTextNode(`↑↓ switch session · esc back to picker`));
3649
+ _$insertNode(_el$104, _$createTextNode(`↑↓ switch session · esc back to picker`));
3570
3650
  _$effect(_p$ => {
3571
- var _v$38 = dialogHeight(),
3572
- _v$39 = api.theme.current.backgroundPanel,
3573
- _v$40 = TextAttributes.BOLD,
3574
- _v$41 = {
3651
+ var _v$40 = dialogHeight(),
3652
+ _v$41 = api.theme.current.backgroundPanel,
3653
+ _v$42 = TextAttributes.BOLD,
3654
+ _v$43 = {
3575
3655
  fg: api.theme.current.textMuted
3576
3656
  },
3577
- _v$42 = {
3657
+ _v$44 = {
3578
3658
  fg: api.theme.current.textMuted
3579
3659
  };
3580
- _v$38 !== _p$.e && (_p$.e = _$setProp(_el$97, "height", _v$38, _p$.e));
3581
- _v$39 !== _p$.t && (_p$.t = _$setProp(_el$97, "backgroundColor", _v$39, _p$.t));
3582
- _v$40 !== _p$.a && (_p$.a = _$setProp(_el$99, "attributes", _v$40, _p$.a));
3583
- _v$41 !== _p$.o && (_p$.o = _$setProp(_el$100, "style", _v$41, _p$.o));
3584
- _v$42 !== _p$.i && (_p$.i = _$setProp(_el$105, "style", _v$42, _p$.i));
3660
+ _v$40 !== _p$.e && (_p$.e = _$setProp(_el$96, "height", _v$40, _p$.e));
3661
+ _v$41 !== _p$.t && (_p$.t = _$setProp(_el$96, "backgroundColor", _v$41, _p$.t));
3662
+ _v$42 !== _p$.a && (_p$.a = _$setProp(_el$98, "attributes", _v$42, _p$.a));
3663
+ _v$43 !== _p$.o && (_p$.o = _$setProp(_el$99, "style", _v$43, _p$.o));
3664
+ _v$44 !== _p$.i && (_p$.i = _$setProp(_el$104, "style", _v$44, _p$.i));
3585
3665
  return _p$;
3586
3666
  }, {
3587
3667
  e: undefined,
@@ -3590,52 +3670,52 @@ const tui = async api => {
3590
3670
  o: undefined,
3591
3671
  i: undefined
3592
3672
  });
3593
- return _el$97;
3673
+ return _el$96;
3594
3674
  }
3595
3675
  }), null);
3596
3676
  _$effect(_p$ => {
3597
- var _v$43 = dialogHeight(),
3598
- _v$44 = dialogOffset(),
3599
- _v$45 = api.theme.current.backgroundPanel,
3600
- _v$46 = TextAttributes.BOLD,
3601
- _v$47 = {
3677
+ var _v$45 = dialogHeight(),
3678
+ _v$46 = dialogOffset(),
3679
+ _v$47 = api.theme.current.backgroundPanel,
3680
+ _v$48 = TextAttributes.BOLD,
3681
+ _v$49 = {
3602
3682
  fg: api.theme.current.textMuted
3603
3683
  },
3604
- _v$48 = {
3684
+ _v$50 = {
3605
3685
  fg: api.theme.current.textMuted
3606
3686
  },
3607
- _v$49 = query(),
3608
- _v$50 = api.theme.current.textMuted,
3609
- _v$51 = api.theme.current.backgroundPanel,
3610
- _v$52 = api.theme.current.text,
3611
- _v$53 = api.theme.current.primary,
3612
- _v$54 = {
3687
+ _v$51 = query(),
3688
+ _v$52 = api.theme.current.textMuted,
3689
+ _v$53 = api.theme.current.backgroundPanel,
3690
+ _v$54 = api.theme.current.text,
3691
+ _v$55 = api.theme.current.primary,
3692
+ _v$56 = {
3613
3693
  fg: scope() ? api.theme.current.accent : api.theme.current.textMuted
3614
3694
  },
3615
- _v$55 = {
3695
+ _v$57 = {
3616
3696
  fg: waitingOnly() ? api.theme.current.warning : api.theme.current.textMuted
3617
3697
  },
3618
- _v$56 = {
3698
+ _v$58 = {
3619
3699
  fg: pinnedOnly() ? api.theme.current.accent : api.theme.current.textMuted
3620
3700
  },
3621
- _v$57 = {
3701
+ _v$59 = {
3622
3702
  fg: pendingDelete() ? api.theme.current.warning : api.theme.current.textMuted
3623
3703
  };
3624
- _v$43 !== _p$.e && (_p$.e = _$setProp(_el$72, "height", _v$43, _p$.e));
3625
- _v$44 !== _p$.t && (_p$.t = _$setProp(_el$72, "marginTop", _v$44, _p$.t));
3626
- _v$45 !== _p$.a && (_p$.a = _$setProp(_el$72, "backgroundColor", _v$45, _p$.a));
3627
- _v$46 !== _p$.o && (_p$.o = _$setProp(_el$75, "attributes", _v$46, _p$.o));
3628
- _v$47 !== _p$.i && (_p$.i = _$setProp(_el$77, "style", _v$47, _p$.i));
3629
- _v$48 !== _p$.n && (_p$.n = _$setProp(_el$80, "style", _v$48, _p$.n));
3630
- _v$49 !== _p$.s && (_p$.s = _$setProp(_el$83, "value", _v$49, _p$.s));
3631
- _v$50 !== _p$.h && (_p$.h = _$setProp(_el$83, "placeholderColor", _v$50, _p$.h));
3632
- _v$51 !== _p$.r && (_p$.r = _$setProp(_el$83, "focusedBackgroundColor", _v$51, _p$.r));
3633
- _v$52 !== _p$.d && (_p$.d = _$setProp(_el$83, "focusedTextColor", _v$52, _p$.d));
3634
- _v$53 !== _p$.l && (_p$.l = _$setProp(_el$83, "cursorColor", _v$53, _p$.l));
3635
- _v$54 !== _p$.u && (_p$.u = _$setProp(_el$87, "style", _v$54, _p$.u));
3636
- _v$55 !== _p$.c && (_p$.c = _$setProp(_el$88, "style", _v$55, _p$.c));
3637
- _v$56 !== _p$.w && (_p$.w = _$setProp(_el$89, "style", _v$56, _p$.w));
3638
- _v$57 !== _p$.m && (_p$.m = _$setProp(_el$94, "style", _v$57, _p$.m));
3704
+ _v$45 !== _p$.e && (_p$.e = _$setProp(_el$71, "height", _v$45, _p$.e));
3705
+ _v$46 !== _p$.t && (_p$.t = _$setProp(_el$71, "marginTop", _v$46, _p$.t));
3706
+ _v$47 !== _p$.a && (_p$.a = _$setProp(_el$71, "backgroundColor", _v$47, _p$.a));
3707
+ _v$48 !== _p$.o && (_p$.o = _$setProp(_el$74, "attributes", _v$48, _p$.o));
3708
+ _v$49 !== _p$.i && (_p$.i = _$setProp(_el$76, "style", _v$49, _p$.i));
3709
+ _v$50 !== _p$.n && (_p$.n = _$setProp(_el$79, "style", _v$50, _p$.n));
3710
+ _v$51 !== _p$.s && (_p$.s = _$setProp(_el$82, "value", _v$51, _p$.s));
3711
+ _v$52 !== _p$.h && (_p$.h = _$setProp(_el$82, "placeholderColor", _v$52, _p$.h));
3712
+ _v$53 !== _p$.r && (_p$.r = _$setProp(_el$82, "focusedBackgroundColor", _v$53, _p$.r));
3713
+ _v$54 !== _p$.d && (_p$.d = _$setProp(_el$82, "focusedTextColor", _v$54, _p$.d));
3714
+ _v$55 !== _p$.l && (_p$.l = _$setProp(_el$82, "cursorColor", _v$55, _p$.l));
3715
+ _v$56 !== _p$.u && (_p$.u = _$setProp(_el$86, "style", _v$56, _p$.u));
3716
+ _v$57 !== _p$.c && (_p$.c = _$setProp(_el$87, "style", _v$57, _p$.c));
3717
+ _v$58 !== _p$.w && (_p$.w = _$setProp(_el$88, "style", _v$58, _p$.w));
3718
+ _v$59 !== _p$.m && (_p$.m = _$setProp(_el$93, "style", _v$59, _p$.m));
3639
3719
  return _p$;
3640
3720
  }, {
3641
3721
  e: undefined,
@@ -3654,7 +3734,7 @@ const tui = async api => {
3654
3734
  w: undefined,
3655
3735
  m: undefined
3656
3736
  });
3657
- return _el$72;
3737
+ return _el$71;
3658
3738
  })(), () => {
3659
3739
  cleanup();
3660
3740
  });
@@ -3700,105 +3780,105 @@ const tui = async api => {
3700
3780
  }]
3701
3781
  });
3702
3782
  api.ui.dialog.replace(() => (() => {
3703
- var _el$127 = _$createElement("box"),
3704
- _el$128 = _$createElement("text"),
3705
- _el$129 = _$createTextNode(`Cost digest `),
3706
- _el$131 = _$createElement("span"),
3707
- _el$133 = _$createElement("box"),
3708
- _el$134 = _$createElement("text");
3783
+ var _el$126 = _$createElement("box"),
3784
+ _el$127 = _$createElement("text"),
3785
+ _el$128 = _$createTextNode(`Cost digest `),
3786
+ _el$130 = _$createElement("span"),
3787
+ _el$132 = _$createElement("box"),
3788
+ _el$133 = _$createElement("text");
3789
+ _$insertNode(_el$126, _el$127);
3790
+ _$insertNode(_el$126, _el$132);
3791
+ _$setProp(_el$126, "flexDirection", "column");
3792
+ _$setProp(_el$126, "paddingLeft", 4);
3793
+ _$setProp(_el$126, "paddingRight", 4);
3794
+ _$setProp(_el$126, "paddingTop", 1);
3795
+ _$setProp(_el$126, "gap", 1);
3709
3796
  _$insertNode(_el$127, _el$128);
3710
- _$insertNode(_el$127, _el$133);
3711
- _$setProp(_el$127, "flexDirection", "column");
3712
- _$setProp(_el$127, "paddingLeft", 4);
3713
- _$setProp(_el$127, "paddingRight", 4);
3714
- _$setProp(_el$127, "paddingTop", 1);
3715
- _$setProp(_el$127, "gap", 1);
3716
- _$insertNode(_el$128, _el$129);
3717
- _$insertNode(_el$128, _el$131);
3718
- _$insertNode(_el$131, _$createTextNode(`(24h · lifetime)`));
3719
- _$insert(_el$127, _$createComponent(Show, {
3797
+ _$insertNode(_el$127, _el$130);
3798
+ _$insertNode(_el$130, _$createTextNode(`(24h · lifetime)`));
3799
+ _$insert(_el$126, _$createComponent(Show, {
3720
3800
  get when() {
3721
3801
  return !failed && rows.length > 0;
3722
3802
  },
3723
3803
  get fallback() {
3724
3804
  return (() => {
3725
- var _el$136 = _$createElement("text");
3726
- _$insert(_el$136, failed ? "Cost data unavailable." : "No assistant cost recorded.");
3727
- _$effect(_$p => _$setProp(_el$136, "style", {
3805
+ var _el$135 = _$createElement("text");
3806
+ _$insert(_el$135, failed ? "Cost data unavailable." : "No assistant cost recorded.");
3807
+ _$effect(_$p => _$setProp(_el$135, "style", {
3728
3808
  fg: api.theme.current.textMuted
3729
3809
  }, _$p));
3730
- return _el$136;
3810
+ return _el$135;
3731
3811
  })();
3732
3812
  },
3733
3813
  get children() {
3734
3814
  return _$createComponent(For, {
3735
3815
  each: rows,
3736
3816
  children: row => (() => {
3737
- var _el$137 = _$createElement("box"),
3817
+ var _el$136 = _$createElement("box"),
3818
+ _el$137 = _$createElement("text"),
3738
3819
  _el$138 = _$createElement("text"),
3739
3820
  _el$139 = _$createElement("text"),
3740
- _el$140 = _$createElement("text"),
3741
- _el$141 = _$createTextNode(`(`),
3742
- _el$142 = _$createTextNode(`)`),
3743
- _el$143 = _$createElement("text");
3744
- _$insertNode(_el$137, _el$138);
3745
- _$insertNode(_el$137, _el$139);
3746
- _$insertNode(_el$137, _el$140);
3747
- _$insertNode(_el$137, _el$143);
3748
- _$setProp(_el$137, "flexDirection", "row");
3749
- _$setProp(_el$137, "gap", 2);
3821
+ _el$140 = _$createTextNode(`(`),
3822
+ _el$141 = _$createTextNode(`)`),
3823
+ _el$142 = _$createElement("text");
3824
+ _$insertNode(_el$136, _el$137);
3825
+ _$insertNode(_el$136, _el$138);
3826
+ _$insertNode(_el$136, _el$139);
3827
+ _$insertNode(_el$136, _el$142);
3828
+ _$setProp(_el$136, "flexDirection", "row");
3829
+ _$setProp(_el$136, "gap", 2);
3830
+ _$setProp(_el$137, "flexShrink", 0);
3831
+ _$insert(_el$137, () => money(row.window));
3750
3832
  _$setProp(_el$138, "flexShrink", 0);
3751
- _$insert(_el$138, () => money(row.window));
3833
+ _$insert(_el$138, () => money(row.lifetime));
3834
+ _$insertNode(_el$139, _el$140);
3835
+ _$insertNode(_el$139, _el$141);
3752
3836
  _$setProp(_el$139, "flexShrink", 0);
3753
- _$insert(_el$139, () => money(row.lifetime));
3754
- _$insertNode(_el$140, _el$141);
3755
- _$insertNode(_el$140, _el$142);
3756
- _$setProp(_el$140, "flexShrink", 0);
3757
- _$insert(_el$140, () => row.sessions, _el$142);
3758
- _$setProp(_el$143, "flexGrow", 1);
3759
- _$setProp(_el$143, "flexShrink", 1);
3760
- _$setProp(_el$143, "wrapMode", "none");
3761
- _$insert(_el$143, () => prettyDir(row.directory, home));
3837
+ _$insert(_el$139, () => row.sessions, _el$141);
3838
+ _$setProp(_el$142, "flexGrow", 1);
3839
+ _$setProp(_el$142, "flexShrink", 1);
3840
+ _$setProp(_el$142, "wrapMode", "none");
3841
+ _$insert(_el$142, () => prettyDir(row.directory, home));
3762
3842
  _$effect(_p$ => {
3763
- var _v$72 = {
3843
+ var _v$74 = {
3764
3844
  fg: api.theme.current.success
3765
3845
  },
3766
- _v$73 = {
3846
+ _v$75 = {
3767
3847
  fg: api.theme.current.textMuted
3768
3848
  },
3769
- _v$74 = {
3849
+ _v$76 = {
3770
3850
  fg: api.theme.current.textMuted
3771
3851
  };
3772
- _v$72 !== _p$.e && (_p$.e = _$setProp(_el$138, "style", _v$72, _p$.e));
3773
- _v$73 !== _p$.t && (_p$.t = _$setProp(_el$139, "style", _v$73, _p$.t));
3774
- _v$74 !== _p$.a && (_p$.a = _$setProp(_el$140, "style", _v$74, _p$.a));
3852
+ _v$74 !== _p$.e && (_p$.e = _$setProp(_el$137, "style", _v$74, _p$.e));
3853
+ _v$75 !== _p$.t && (_p$.t = _$setProp(_el$138, "style", _v$75, _p$.t));
3854
+ _v$76 !== _p$.a && (_p$.a = _$setProp(_el$139, "style", _v$76, _p$.a));
3775
3855
  return _p$;
3776
3856
  }, {
3777
3857
  e: undefined,
3778
3858
  t: undefined,
3779
3859
  a: undefined
3780
3860
  });
3781
- return _el$137;
3861
+ return _el$136;
3782
3862
  })()
3783
3863
  });
3784
3864
  }
3785
- }), _el$133);
3786
- _$insertNode(_el$133, _el$134);
3787
- _$setProp(_el$133, "flexShrink", 0);
3788
- _$insertNode(_el$134, _$createTextNode(`esc close`));
3865
+ }), _el$132);
3866
+ _$insertNode(_el$132, _el$133);
3867
+ _$setProp(_el$132, "flexShrink", 0);
3868
+ _$insertNode(_el$133, _$createTextNode(`esc close`));
3789
3869
  _$effect(_p$ => {
3790
- var _v$68 = api.theme.current.backgroundPanel,
3791
- _v$69 = TextAttributes.BOLD,
3792
- _v$70 = {
3870
+ var _v$70 = api.theme.current.backgroundPanel,
3871
+ _v$71 = TextAttributes.BOLD,
3872
+ _v$72 = {
3793
3873
  fg: api.theme.current.textMuted
3794
3874
  },
3795
- _v$71 = {
3875
+ _v$73 = {
3796
3876
  fg: api.theme.current.textMuted
3797
3877
  };
3798
- _v$68 !== _p$.e && (_p$.e = _$setProp(_el$127, "backgroundColor", _v$68, _p$.e));
3799
- _v$69 !== _p$.t && (_p$.t = _$setProp(_el$128, "attributes", _v$69, _p$.t));
3800
- _v$70 !== _p$.a && (_p$.a = _$setProp(_el$131, "style", _v$70, _p$.a));
3801
- _v$71 !== _p$.o && (_p$.o = _$setProp(_el$134, "style", _v$71, _p$.o));
3878
+ _v$70 !== _p$.e && (_p$.e = _$setProp(_el$126, "backgroundColor", _v$70, _p$.e));
3879
+ _v$71 !== _p$.t && (_p$.t = _$setProp(_el$127, "attributes", _v$71, _p$.t));
3880
+ _v$72 !== _p$.a && (_p$.a = _$setProp(_el$130, "style", _v$72, _p$.a));
3881
+ _v$73 !== _p$.o && (_p$.o = _$setProp(_el$133, "style", _v$73, _p$.o));
3802
3882
  return _p$;
3803
3883
  }, {
3804
3884
  e: undefined,
@@ -3806,7 +3886,7 @@ const tui = async api => {
3806
3886
  a: undefined,
3807
3887
  o: undefined
3808
3888
  });
3809
- return _el$127;
3889
+ return _el$126;
3810
3890
  })(), () => {
3811
3891
  disposeKeys();
3812
3892
  });
@@ -3915,79 +3995,79 @@ const tui = async api => {
3915
3995
  });
3916
3996
  const home = process.env.HOME ?? "";
3917
3997
  api.ui.dialog.replace(() => (() => {
3918
- var _el$144 = _$createElement("box"),
3919
- _el$145 = _$createElement("text"),
3920
- _el$146 = _$createTextNode(`Needs input `),
3921
- _el$148 = _$createElement("span"),
3922
- _el$149 = _$createTextNode(`(`),
3923
- _el$150 = _$createTextNode(` · longest waiting first)`),
3924
- _el$151 = _$createElement("scrollbox"),
3925
- _el$152 = _$createElement("box"),
3926
- _el$153 = _$createElement("text");
3998
+ var _el$143 = _$createElement("box"),
3999
+ _el$144 = _$createElement("text"),
4000
+ _el$145 = _$createTextNode(`Needs input `),
4001
+ _el$147 = _$createElement("span"),
4002
+ _el$148 = _$createTextNode(`(`),
4003
+ _el$149 = _$createTextNode(` · longest waiting first)`),
4004
+ _el$150 = _$createElement("scrollbox"),
4005
+ _el$151 = _$createElement("box"),
4006
+ _el$152 = _$createElement("text");
4007
+ _$insertNode(_el$143, _el$144);
4008
+ _$insertNode(_el$143, _el$150);
4009
+ _$insertNode(_el$143, _el$151);
4010
+ _$setProp(_el$143, "flexDirection", "column");
4011
+ _$setProp(_el$143, "paddingLeft", 4);
4012
+ _$setProp(_el$143, "paddingRight", 4);
4013
+ _$setProp(_el$143, "paddingTop", 1);
4014
+ _$setProp(_el$143, "gap", 1);
3927
4015
  _$insertNode(_el$144, _el$145);
3928
- _$insertNode(_el$144, _el$151);
3929
- _$insertNode(_el$144, _el$152);
3930
- _$setProp(_el$144, "flexDirection", "column");
3931
- _$setProp(_el$144, "paddingLeft", 4);
3932
- _$setProp(_el$144, "paddingRight", 4);
3933
- _$setProp(_el$144, "paddingTop", 1);
3934
- _$setProp(_el$144, "gap", 1);
3935
- _$insertNode(_el$145, _el$146);
3936
- _$insertNode(_el$145, _el$148);
3937
- _$insertNode(_el$148, _el$149);
3938
- _$insertNode(_el$148, _el$150);
3939
- _$insert(_el$148, () => items.length, _el$150);
3940
- _$setProp(_el$151, "flexGrow", 1);
3941
- _$setProp(_el$151, "scrollbarOptions", {
4016
+ _$insertNode(_el$144, _el$147);
4017
+ _$insertNode(_el$147, _el$148);
4018
+ _$insertNode(_el$147, _el$149);
4019
+ _$insert(_el$147, () => items.length, _el$149);
4020
+ _$setProp(_el$150, "flexGrow", 1);
4021
+ _$setProp(_el$150, "scrollbarOptions", {
3942
4022
  visible: false
3943
4023
  });
3944
- _$insert(_el$151, _$createComponent(For, {
4024
+ _$insert(_el$150, _$createComponent(For, {
3945
4025
  each: items,
3946
4026
  children: (item, index) => (() => {
3947
- var _el$155 = _$createElement("box"),
4027
+ var _el$154 = _$createElement("box"),
4028
+ _el$155 = _$createElement("text"),
3948
4029
  _el$156 = _$createElement("text"),
3949
4030
  _el$157 = _$createElement("text"),
3950
- _el$158 = _$createElement("text"),
3951
- _el$159 = _$createTextNode(` · `);
3952
- _$insertNode(_el$155, _el$156);
3953
- _$insertNode(_el$155, _el$157);
3954
- _$insertNode(_el$155, _el$158);
3955
- _$setProp(_el$155, "flexDirection", "row");
3956
- _$setProp(_el$155, "gap", 2);
3957
- _$setProp(_el$155, "paddingLeft", 1);
3958
- _$setProp(_el$155, "paddingRight", 1);
3959
- _$setProp(_el$155, "onMouseDown", () => {
4031
+ _el$158 = _$createTextNode(` · `);
4032
+ _$insertNode(_el$154, _el$155);
4033
+ _$insertNode(_el$154, _el$156);
4034
+ _$insertNode(_el$154, _el$157);
4035
+ _$setProp(_el$154, "flexDirection", "row");
4036
+ _$setProp(_el$154, "gap", 2);
4037
+ _$setProp(_el$154, "paddingLeft", 1);
4038
+ _$setProp(_el$154, "paddingRight", 1);
4039
+ _$setProp(_el$154, "onMouseDown", () => {
3960
4040
  setCursor(index());
3961
4041
  choose(item);
3962
4042
  });
3963
- _$setProp(_el$156, "flexGrow", 1);
3964
- _$setProp(_el$156, "flexShrink", 1);
3965
- _$setProp(_el$156, "wrapMode", "none");
3966
- _$insert(_el$156, () => truncate(item.entry.title, 48));
4043
+ _$setProp(_el$155, "flexGrow", 1);
4044
+ _$setProp(_el$155, "flexShrink", 1);
4045
+ _$setProp(_el$155, "wrapMode", "none");
4046
+ _$insert(_el$155, () => truncate(item.entry.title, 48));
4047
+ _$setProp(_el$156, "flexShrink", 0);
4048
+ _$insert(_el$156, () => item.reason);
4049
+ _$insertNode(_el$157, _el$158);
3967
4050
  _$setProp(_el$157, "flexShrink", 0);
3968
- _$insert(_el$157, () => item.reason);
3969
- _$insertNode(_el$158, _el$159);
3970
- _$setProp(_el$158, "flexShrink", 0);
3971
- _$insert(_el$158, () => prettyDir(item.entry.dir, home), _el$159);
3972
- _$insert(_el$158, (() => {
4051
+ _$insert(_el$157, () => prettyDir(item.entry.dir, home), _el$158);
4052
+ _$insert(_el$157, (() => {
3973
4053
  var _c$1 = _$memo(() => item.since === undefined);
3974
4054
  return () => _c$1() ? "time unknown" : `waiting ${ago(item.since)}`;
3975
4055
  })(), null);
3976
4056
  _$effect(_p$ => {
3977
- var _v$80 = index() === cursor() ? api.theme.current.backgroundElement : RGBA.fromInts(0, 0, 0, 0),
3978
- _v$81 = {
4057
+ var _v$82 = index() === cursor() ? api.theme.current.backgroundElement : RGBA.fromInts(0, 0, 0, 0),
4058
+ _v$83 = {
3979
4059
  fg: index() === cursor() ? api.theme.current.text : api.theme.current.text
3980
4060
  },
3981
- _v$82 = {
4061
+ _v$84 = {
3982
4062
  fg: index() === cursor() ? api.theme.current.text : api.theme.current.warning
3983
4063
  },
3984
- _v$83 = {
4064
+ _v$85 = {
3985
4065
  fg: index() === cursor() ? api.theme.current.text : api.theme.current.textMuted
3986
4066
  };
3987
- _v$80 !== _p$.e && (_p$.e = _$setProp(_el$155, "backgroundColor", _v$80, _p$.e));
3988
- _v$81 !== _p$.t && (_p$.t = _$setProp(_el$156, "style", _v$81, _p$.t));
3989
- _v$82 !== _p$.a && (_p$.a = _$setProp(_el$157, "style", _v$82, _p$.a));
3990
- _v$83 !== _p$.o && (_p$.o = _$setProp(_el$158, "style", _v$83, _p$.o));
4067
+ _v$82 !== _p$.e && (_p$.e = _$setProp(_el$154, "backgroundColor", _v$82, _p$.e));
4068
+ _v$83 !== _p$.t && (_p$.t = _$setProp(_el$155, "style", _v$83, _p$.t));
4069
+ _v$84 !== _p$.a && (_p$.a = _$setProp(_el$156, "style", _v$84, _p$.a));
4070
+ _v$85 !== _p$.o && (_p$.o = _$setProp(_el$157, "style", _v$85, _p$.o));
3991
4071
  return _p$;
3992
4072
  }, {
3993
4073
  e: undefined,
@@ -3995,27 +4075,27 @@ const tui = async api => {
3995
4075
  a: undefined,
3996
4076
  o: undefined
3997
4077
  });
3998
- return _el$155;
4078
+ return _el$154;
3999
4079
  })()
4000
4080
  }));
4001
- _$insertNode(_el$152, _el$153);
4002
- _$setProp(_el$152, "flexShrink", 0);
4003
- _$insertNode(_el$153, _$createTextNode(`↑↓ navigate · enter open · n open next waiting · esc close`));
4081
+ _$insertNode(_el$151, _el$152);
4082
+ _$setProp(_el$151, "flexShrink", 0);
4083
+ _$insertNode(_el$152, _$createTextNode(`↑↓ navigate · enter open · n open next waiting · esc close`));
4004
4084
  _$effect(_p$ => {
4005
- var _v$75 = api.theme.current.backgroundPanel,
4006
- _v$76 = TextAttributes.BOLD,
4007
- _v$77 = {
4085
+ var _v$77 = api.theme.current.backgroundPanel,
4086
+ _v$78 = TextAttributes.BOLD,
4087
+ _v$79 = {
4008
4088
  fg: api.theme.current.textMuted
4009
4089
  },
4010
- _v$78 = Math.max(6, Math.floor(api.renderer.height / 2) - 10),
4011
- _v$79 = {
4090
+ _v$80 = Math.max(6, Math.floor(api.renderer.height / 2) - 10),
4091
+ _v$81 = {
4012
4092
  fg: api.theme.current.textMuted
4013
4093
  };
4014
- _v$75 !== _p$.e && (_p$.e = _$setProp(_el$144, "backgroundColor", _v$75, _p$.e));
4015
- _v$76 !== _p$.t && (_p$.t = _$setProp(_el$145, "attributes", _v$76, _p$.t));
4016
- _v$77 !== _p$.a && (_p$.a = _$setProp(_el$148, "style", _v$77, _p$.a));
4017
- _v$78 !== _p$.o && (_p$.o = _$setProp(_el$151, "height", _v$78, _p$.o));
4018
- _v$79 !== _p$.i && (_p$.i = _$setProp(_el$153, "style", _v$79, _p$.i));
4094
+ _v$77 !== _p$.e && (_p$.e = _$setProp(_el$143, "backgroundColor", _v$77, _p$.e));
4095
+ _v$78 !== _p$.t && (_p$.t = _$setProp(_el$144, "attributes", _v$78, _p$.t));
4096
+ _v$79 !== _p$.a && (_p$.a = _$setProp(_el$147, "style", _v$79, _p$.a));
4097
+ _v$80 !== _p$.o && (_p$.o = _$setProp(_el$150, "height", _v$80, _p$.o));
4098
+ _v$81 !== _p$.i && (_p$.i = _$setProp(_el$152, "style", _v$81, _p$.i));
4019
4099
  return _p$;
4020
4100
  }, {
4021
4101
  e: undefined,
@@ -4024,7 +4104,7 @@ const tui = async api => {
4024
4104
  o: undefined,
4025
4105
  i: undefined
4026
4106
  });
4027
- return _el$144;
4107
+ return _el$143;
4028
4108
  })(), () => {
4029
4109
  disposeNav();
4030
4110
  });