paneltir 0.11.0 → 0.12.1

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/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // src/version.ts
2
- var PANELTIR_VERSION = "0.11.0";
3
- var PANELTIR_FINGERPRINT = "sha256:2739462e763939de1d1aeb8ab97779149c2ddb0ec2d2fb45644c4c45ef9dc9fa";
4
- var PANELTIR_FILE_COUNT = 163;
5
- var PANELTIR_TEMPLATE_HASH = "sha256:034ba27266408af4f2ba5793d9cefbe448b168570d6a0b87dfe698dfe639feb1";
2
+ var PANELTIR_VERSION = "0.12.1";
3
+ var PANELTIR_FINGERPRINT = "sha256:3e958b3c4fa8a7c32fb49568d6189c9a0dea22e65263265177ba6d404ffa13ca";
4
+ var PANELTIR_FILE_COUNT = 166;
5
+ var PANELTIR_TEMPLATE_HASH = "sha256:9d9168001acb58c6ac0c7766515cb0fa95c4fc6d16e6fb17efd59d88e4a3c382";
6
6
  var paneltirBuild = {
7
7
  version: PANELTIR_VERSION,
8
8
  fingerprint: PANELTIR_FINGERPRINT,
@@ -182,10 +182,25 @@ var paperForm = {
182
182
  labelTracking: "1.2px",
183
183
  density: 1.1
184
184
  };
185
+ var warRoomForm = {
186
+ shape: "warRoom",
187
+ radiusPanel: "2px",
188
+ radiusCard: "0px",
189
+ radiusControl: "2px",
190
+ radiusSquare: "0px",
191
+ radiusPill: "2px",
192
+ borderWidth: "1px",
193
+ fontSize: "13.5px",
194
+ labelTracking: "1.6px",
195
+ // The only form that tightens rather than loosens. A war room is judged on
196
+ // how much of the board is on the screen at once.
197
+ density: 0.82
198
+ };
185
199
  var THEME_FORMS = {
186
200
  panel: panelForm,
187
201
  ledger: ledgerForm,
188
- paper: paperForm
202
+ paper: paperForm,
203
+ warRoom: warRoomForm
189
204
  };
190
205
  var THEME_PRESETS = {
191
206
  midnight: midnightTheme,
@@ -244,30 +259,61 @@ function HealthPillRow({ children }) {
244
259
  return /* @__PURE__ */ jsx5("div", { className: "pt-health-row", children });
245
260
  }
246
261
 
262
+ // src/components/Situation/SituationRow.tsx
263
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
264
+ function SituationRow({
265
+ blockingLabel,
266
+ blocking,
267
+ clearLabel,
268
+ statusLabel,
269
+ status
270
+ }) {
271
+ const total = blocking.reduce((sum, item) => sum + item.count, 0);
272
+ return /* @__PURE__ */ jsxs5("div", { className: "pt-situation", children: [
273
+ /* @__PURE__ */ jsxs5("section", { className: "pt-situation__half pt-situation__half--blocking", children: [
274
+ /* @__PURE__ */ jsx6("p", { className: "pt-eyebrow", children: blockingLabel }),
275
+ total === 0 ? /* @__PURE__ */ jsx6("p", { className: "pt-situation__clear", children: clearLabel }) : /* @__PURE__ */ jsx6("div", { className: "pt-situation__items", children: blocking.map((item) => {
276
+ const tone = item.count === 0 ? "clear" : item.tone ?? "attention";
277
+ const className = `pt-situation__item pt-situation__item--${tone}`;
278
+ const body = /* @__PURE__ */ jsxs5(Fragment2, { children: [
279
+ /* @__PURE__ */ jsx6("span", { className: "pt-situation__count", children: item.count }),
280
+ /* @__PURE__ */ jsx6("span", { className: "pt-situation__label", children: item.label }),
281
+ item.hint ? /* @__PURE__ */ jsx6("span", { className: "pt-situation__hint", children: item.hint }) : null
282
+ ] });
283
+ return item.onClick ? /* @__PURE__ */ jsx6("button", { type: "button", className, onClick: item.onClick, children: body }, item.id) : /* @__PURE__ */ jsx6("div", { className, children: body }, item.id);
284
+ }) })
285
+ ] }),
286
+ status ? /* @__PURE__ */ jsxs5("section", { className: "pt-situation__half pt-situation__half--status", children: [
287
+ /* @__PURE__ */ jsx6("p", { className: "pt-eyebrow", children: statusLabel }),
288
+ status
289
+ ] }) : null
290
+ ] });
291
+ }
292
+
247
293
  // src/components/FilterChips/FilterChip.tsx
248
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
294
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
249
295
  function FilterChip({ label, count, active, onClick }) {
250
- return /* @__PURE__ */ jsxs5("button", { type: "button", className: `pt-filter-chip${active ? " is-active" : ""}`, "aria-pressed": active, onClick, children: [
296
+ return /* @__PURE__ */ jsxs6("button", { type: "button", className: `pt-filter-chip${active ? " is-active" : ""}`, "aria-pressed": active, onClick, children: [
251
297
  label,
252
- typeof count === "number" && /* @__PURE__ */ jsx6("span", { className: "pt-filter-chip__count", children: count })
298
+ typeof count === "number" && /* @__PURE__ */ jsx7("span", { className: "pt-filter-chip__count", children: count })
253
299
  ] });
254
300
  }
255
301
  function FilterChipRow({ children }) {
256
- return /* @__PURE__ */ jsx6("div", { className: "pt-filter-row", children });
302
+ return /* @__PURE__ */ jsx7("div", { className: "pt-filter-row", children });
257
303
  }
258
304
 
259
305
  // src/components/Board/Board.tsx
260
306
  import { useRef as useRef3 } from "react";
261
307
 
262
308
  // src/components/Board/Column.tsx
263
- import { Fragment as Fragment2 } from "react";
309
+ import { Fragment as Fragment3 } from "react";
264
310
 
265
311
  // src/components/Board/BoardDndContext.tsx
266
312
  import { createContext as createContext2, useContext as useContext2 } from "react";
267
- import { jsx as jsx7 } from "react/jsx-runtime";
313
+ import { jsx as jsx8 } from "react/jsx-runtime";
268
314
  var BoardDndContext = createContext2(null);
269
315
  function BoardDndProvider({ value, children }) {
270
- return /* @__PURE__ */ jsx7(BoardDndContext.Provider, { value, children });
316
+ return /* @__PURE__ */ jsx8(BoardDndContext.Provider, { value, children });
271
317
  }
272
318
  function useBoardDnDContext() {
273
319
  const ctx = useContext2(BoardDndContext);
@@ -278,16 +324,16 @@ function useBoardDnDContext() {
278
324
  }
279
325
 
280
326
  // src/components/Board/Column.tsx
281
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
327
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
282
328
  function Column({ column, renderCard, onAddCard }) {
283
329
  const dnd = useBoardDnDContext();
284
- return /* @__PURE__ */ jsxs6("div", { className: "pt-column", children: [
285
- /* @__PURE__ */ jsxs6("div", { className: "pt-column__header", children: [
286
- /* @__PURE__ */ jsx8("span", { className: "pt-column__title", title: column.hint, children: column.title }),
287
- /* @__PURE__ */ jsx8("span", { className: "pt-column__count", children: column.cards.length }),
288
- column.hint && /* @__PURE__ */ jsx8("span", { className: "pt-sr-only", children: column.hint }),
289
- /* @__PURE__ */ jsx8("span", { className: "pt-column__spacer" }),
290
- onAddCard && /* @__PURE__ */ jsx8(
330
+ return /* @__PURE__ */ jsxs7("div", { className: "pt-column", children: [
331
+ /* @__PURE__ */ jsxs7("div", { className: "pt-column__header", children: [
332
+ /* @__PURE__ */ jsx9("span", { className: "pt-column__title", title: column.hint, children: column.title }),
333
+ /* @__PURE__ */ jsx9("span", { className: "pt-column__count", children: column.cards.length }),
334
+ column.hint && /* @__PURE__ */ jsx9("span", { className: "pt-sr-only", children: column.hint }),
335
+ /* @__PURE__ */ jsx9("span", { className: "pt-column__spacer" }),
336
+ onAddCard && /* @__PURE__ */ jsx9(
291
337
  "button",
292
338
  {
293
339
  type: "button",
@@ -298,16 +344,16 @@ function Column({ column, renderCard, onAddCard }) {
298
344
  }
299
345
  )
300
346
  ] }),
301
- /* @__PURE__ */ jsxs6("div", { className: "pt-column__list", "data-pt-column-list": column.id, children: [
347
+ /* @__PURE__ */ jsxs7("div", { className: "pt-column__list", "data-pt-column-list": column.id, children: [
302
348
  column.cards.map((card, index) => {
303
349
  const showBefore = dnd.isDragging && dnd.dropTarget?.columnId === column.id && dnd.dropTarget.index === index;
304
- return /* @__PURE__ */ jsxs6(Fragment2, { children: [
305
- showBefore && /* @__PURE__ */ jsx8("div", { className: "pt-card-placeholder" }),
350
+ return /* @__PURE__ */ jsxs7(Fragment3, { children: [
351
+ showBefore && /* @__PURE__ */ jsx9("div", { className: "pt-card-placeholder", "data-pt-placeholder": true }),
306
352
  renderCard(card, index, column.id)
307
353
  ] }, card.id);
308
354
  }),
309
- dnd.isDragging && dnd.dropTarget?.columnId === column.id && dnd.dropTarget.index === column.cards.length && /* @__PURE__ */ jsx8("div", { className: "pt-card-placeholder" }),
310
- column.footer ? /* @__PURE__ */ jsx8("div", { className: "pt-column__footer", children: column.footer }) : null
355
+ dnd.isDragging && dnd.dropTarget?.columnId === column.id && dnd.dropTarget.index === column.cards.length && /* @__PURE__ */ jsx9("div", { className: "pt-card-placeholder", "data-pt-placeholder": true }),
356
+ column.footer ? /* @__PURE__ */ jsx9("div", { className: "pt-column__footer", children: column.footer }) : null
311
357
  ] })
312
358
  ] });
313
359
  }
@@ -360,6 +406,11 @@ function useAutoscroll({ active, pointerRef, scrollContainerRef, edgeSize = 56,
360
406
  }
361
407
 
362
408
  // src/components/Board/useBoardDnD.ts
409
+ function dropIndex(source, target) {
410
+ if (source.columnId !== target.columnId) return target.index;
411
+ if (target.index === source.index || target.index === source.index + 1) return null;
412
+ return target.index > source.index ? target.index - 1 : target.index;
413
+ }
363
414
  function useBoardDnD({ columns, onMove, scrollContainerRef }) {
364
415
  const [drag, setDrag] = useState(null);
365
416
  const [pointer, setPointer] = useState(null);
@@ -420,6 +471,7 @@ function useBoardDnD({ columns, onMove, scrollContainerRef }) {
420
471
  if (!listEl) return;
421
472
  const columnId = listEl.getAttribute("data-pt-column-list");
422
473
  const cardEl = el?.closest("[data-pt-card]");
474
+ if (el?.closest("[data-pt-placeholder]")) return;
423
475
  let index;
424
476
  if (cardEl && listEl.contains(cardEl)) {
425
477
  const cardRect = cardEl.getBoundingClientRect();
@@ -446,13 +498,13 @@ function useBoardDnD({ columns, onMove, scrollContainerRef }) {
446
498
  const finalTarget = dropTargetRef.current;
447
499
  const source = dragRef.current;
448
500
  if (finalTarget && source) {
449
- const sameSpot = finalTarget.columnId === source.columnId && (finalTarget.index === source.index || finalTarget.index === source.index + 1);
450
- if (!sameSpot) {
501
+ const toIndex = dropIndex(source, finalTarget);
502
+ if (toIndex !== null) {
451
503
  onMove({
452
504
  cardId: source.cardId,
453
505
  fromColumnId: source.columnId,
454
506
  toColumnId: finalTarget.columnId,
455
- toIndex: finalTarget.index
507
+ toIndex
456
508
  });
457
509
  }
458
510
  }
@@ -490,22 +542,22 @@ function useBoardDnD({ columns, onMove, scrollContainerRef }) {
490
542
  }
491
543
 
492
544
  // src/components/Board/Board.tsx
493
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
545
+ import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
494
546
  function Board({ columns, renderCard, onMove, onAddCard }) {
495
547
  const scrollRef = useRef3(null);
496
548
  const dnd = useBoardDnD({ columns, onMove, scrollContainerRef: scrollRef });
497
- return /* @__PURE__ */ jsxs7(BoardDndProvider, { value: dnd, children: [
498
- /* @__PURE__ */ jsx9("div", { ref: scrollRef, className: `pt-board${dnd.isDragging ? " pt-board--dragging" : ""}`, children: columns.map((column) => /* @__PURE__ */ jsx9(Column, { column, renderCard, onAddCard }, column.id)) }),
499
- /* @__PURE__ */ jsx9("div", { className: "pt-board__clone-layer", ref: dnd.cloneLayerRef })
549
+ return /* @__PURE__ */ jsxs8(BoardDndProvider, { value: dnd, children: [
550
+ /* @__PURE__ */ jsx10("div", { ref: scrollRef, className: `pt-board${dnd.isDragging ? " pt-board--dragging" : ""}`, children: columns.map((column) => /* @__PURE__ */ jsx10(Column, { column, renderCard, onAddCard }, column.id)) }),
551
+ /* @__PURE__ */ jsx10("div", { className: "pt-board__clone-layer", ref: dnd.cloneLayerRef })
500
552
  ] });
501
553
  }
502
554
 
503
555
  // src/components/Board/Card.tsx
504
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
556
+ import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
505
557
  function Card({ cardId, columnId, index, title, priorityColor, tags, progress, children, onClick }) {
506
558
  const dnd = useBoardDnDContext();
507
559
  const isDraggedSource = dnd.drag?.cardId === cardId;
508
- return /* @__PURE__ */ jsxs8(
560
+ return /* @__PURE__ */ jsxs9(
509
561
  "div",
510
562
  {
511
563
  className: `pt-card${isDraggedSource ? " pt-card--dragging-source" : ""}`,
@@ -514,8 +566,8 @@ function Card({ cardId, columnId, index, title, priorityColor, tags, progress, c
514
566
  style: priorityColor ? { "--pt-card-stripe": priorityColor } : void 0,
515
567
  onClick,
516
568
  children: [
517
- /* @__PURE__ */ jsxs8("div", { className: "pt-card__row", children: [
518
- /* @__PURE__ */ jsx10(
569
+ /* @__PURE__ */ jsxs9("div", { className: "pt-card__row", children: [
570
+ /* @__PURE__ */ jsx11(
519
571
  "button",
520
572
  {
521
573
  type: "button",
@@ -525,10 +577,10 @@ function Card({ cardId, columnId, index, title, priorityColor, tags, progress, c
525
577
  children: "\u283F"
526
578
  }
527
579
  ),
528
- /* @__PURE__ */ jsx10("div", { className: "pt-card__title", children: title })
580
+ /* @__PURE__ */ jsx11("div", { className: "pt-card__title", children: title })
529
581
  ] }),
530
- tags && tags.length > 0 && /* @__PURE__ */ jsx10("div", { className: "pt-card__tags", children: tags.map((tag, i) => /* @__PURE__ */ jsx10("span", { className: `pt-tag pt-tag--${tag.tone ?? "neutral"}${tag.emphasize ? " pt-tag--emphasize" : ""}`, children: tag.label }, i)) }),
531
- progress && /* @__PURE__ */ jsxs8("div", { className: `pt-card__progress${progress.done >= progress.total ? " is-complete" : ""}`, children: [
582
+ tags && tags.length > 0 && /* @__PURE__ */ jsx11("div", { className: "pt-card__tags", children: tags.map((tag, i) => /* @__PURE__ */ jsx11("span", { className: `pt-tag pt-tag--${tag.tone ?? "neutral"}${tag.emphasize ? " pt-tag--emphasize" : ""}`, children: tag.label }, i)) }),
583
+ progress && /* @__PURE__ */ jsxs9("div", { className: `pt-card__progress${progress.done >= progress.total ? " is-complete" : ""}`, children: [
532
584
  progress.done,
533
585
  "/",
534
586
  progress.total
@@ -562,9 +614,10 @@ function moveCardInColumns(columns, move) {
562
614
  }
563
615
 
564
616
  // src/components/DetailSheet/DetailSheet.tsx
565
- import { useEffect as useEffect3 } from "react";
566
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
617
+ import { useEffect as useEffect3, useRef as useRef4 } from "react";
618
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
567
619
  function DetailSheet({ open, onClose, children, ariaLabel }) {
620
+ const pressedBackdrop = useRef4(false);
568
621
  useEffect3(() => {
569
622
  if (!open) return;
570
623
  function handleKey(e) {
@@ -574,16 +627,30 @@ function DetailSheet({ open, onClose, children, ariaLabel }) {
574
627
  return () => window.removeEventListener("keydown", handleKey);
575
628
  }, [open, onClose]);
576
629
  if (!open) return null;
577
- return /* @__PURE__ */ jsx11("div", { className: "pt-sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ jsxs9("div", { className: "pt-sheet", role: "dialog", "aria-modal": "true", "aria-label": ariaLabel, onClick: (e) => e.stopPropagation(), children: [
578
- /* @__PURE__ */ jsx11("div", { className: "pt-sheet__handle" }),
579
- children
580
- ] }) });
630
+ return /* @__PURE__ */ jsx12(
631
+ "div",
632
+ {
633
+ className: "pt-sheet-backdrop",
634
+ onPointerDown: (e) => {
635
+ pressedBackdrop.current = e.target === e.currentTarget;
636
+ },
637
+ onClick: (e) => {
638
+ const began = pressedBackdrop.current;
639
+ pressedBackdrop.current = false;
640
+ if (began && e.target === e.currentTarget) onClose();
641
+ },
642
+ children: /* @__PURE__ */ jsxs10("div", { className: "pt-sheet", role: "dialog", "aria-modal": "true", "aria-label": ariaLabel, onClick: (e) => e.stopPropagation(), children: [
643
+ /* @__PURE__ */ jsx12("div", { className: "pt-sheet__handle" }),
644
+ children
645
+ ] })
646
+ }
647
+ );
581
648
  }
582
649
  function DetailSection({ title, subtitle, children }) {
583
- return /* @__PURE__ */ jsxs9("section", { className: "pt-detail-section", children: [
584
- /* @__PURE__ */ jsxs9("h3", { className: "pt-detail-section__title", children: [
650
+ return /* @__PURE__ */ jsxs10("section", { className: "pt-detail-section", children: [
651
+ /* @__PURE__ */ jsxs10("h3", { className: "pt-detail-section__title", children: [
585
652
  title,
586
- subtitle && /* @__PURE__ */ jsxs9("span", { className: "pt-detail-section__subtitle", children: [
653
+ subtitle && /* @__PURE__ */ jsxs10("span", { className: "pt-detail-section__subtitle", children: [
587
654
  " \u2014 ",
588
655
  subtitle
589
656
  ] })
@@ -594,7 +661,7 @@ function DetailSection({ title, subtitle, children }) {
594
661
 
595
662
  // src/components/Guide/Guide.tsx
596
663
  import { useCallback as useCallback2, useEffect as useEffect4, useState as useState2 } from "react";
597
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
664
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
598
665
  import { createElement } from "react";
599
666
  var STORE_PREFIX = "pt-guide:";
600
667
  function readDismissed(key) {
@@ -648,19 +715,19 @@ function GuideNote({
648
715
  dismiss();
649
716
  onDismissed?.();
650
717
  };
651
- return /* @__PURE__ */ jsxs10("aside", { className: "pt-guide", role: "note", children: [
652
- /* @__PURE__ */ jsxs10("div", { className: "pt-guide__head", children: [
653
- /* @__PURE__ */ jsx12("p", { className: "pt-guide__title", children: title }),
654
- step && /* @__PURE__ */ jsxs10("span", { className: "pt-guide__step", "aria-label": `Step ${step.index} of ${step.total}`, children: [
718
+ return /* @__PURE__ */ jsxs11("aside", { className: "pt-guide", role: "note", children: [
719
+ /* @__PURE__ */ jsxs11("div", { className: "pt-guide__head", children: [
720
+ /* @__PURE__ */ jsx13("p", { className: "pt-guide__title", children: title }),
721
+ step && /* @__PURE__ */ jsxs11("span", { className: "pt-guide__step", "aria-label": `Step ${step.index} of ${step.total}`, children: [
655
722
  step.index,
656
723
  "/",
657
724
  step.total
658
725
  ] })
659
726
  ] }),
660
- /* @__PURE__ */ jsx12("div", { className: "pt-guide__body", children }),
661
- /* @__PURE__ */ jsxs10("div", { className: "pt-guide__actions", children: [
662
- action && /* @__PURE__ */ jsx12("button", { type: "button", className: "pt-guide__do", onClick: action.onClick, children: action.label }),
663
- /* @__PURE__ */ jsx12("button", { type: "button", className: "pt-guide__dismiss", onClick: close, children: dismissLabel })
727
+ /* @__PURE__ */ jsx13("div", { className: "pt-guide__body", children }),
728
+ /* @__PURE__ */ jsxs11("div", { className: "pt-guide__actions", children: [
729
+ action && /* @__PURE__ */ jsx13("button", { type: "button", className: "pt-guide__do", onClick: action.onClick, children: action.label }),
730
+ /* @__PURE__ */ jsx13("button", { type: "button", className: "pt-guide__dismiss", onClick: close, children: dismissLabel })
664
731
  ] })
665
732
  ] });
666
733
  }
@@ -693,8 +760,8 @@ function GuideTour({ notes, dismissed, onDismiss }) {
693
760
  }
694
761
 
695
762
  // src/components/Notifications/Notifications.tsx
696
- import { useCallback as useCallback3, useEffect as useEffect5, useMemo as useMemo2, useRef as useRef4, useState as useState3 } from "react";
697
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
763
+ import { useCallback as useCallback3, useEffect as useEffect5, useMemo as useMemo2, useRef as useRef5, useState as useState3 } from "react";
764
+ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
698
765
  var STORE_KEY = "pt-seen";
699
766
  function readSeen() {
700
767
  try {
@@ -722,7 +789,7 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
722
789
  const controlled = given !== void 0;
723
790
  const [stored, setStored] = useState3(null);
724
791
  const [open, setOpen] = useState3(false);
725
- const root = useRef4(null);
792
+ const root = useRef5(null);
726
793
  useEffect5(() => {
727
794
  setStored(readSeen());
728
795
  }, []);
@@ -760,8 +827,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
760
827
  );
761
828
  if (!seen) return null;
762
829
  const count = unread.length;
763
- return /* @__PURE__ */ jsxs11("div", { className: "pt-bell", ref: root, children: [
764
- /* @__PURE__ */ jsxs11(
830
+ return /* @__PURE__ */ jsxs12("div", { className: "pt-bell", ref: root, children: [
831
+ /* @__PURE__ */ jsxs12(
765
832
  "button",
766
833
  {
767
834
  type: "button",
@@ -771,8 +838,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
771
838
  title: count ? `${text2.title} \u2014 ${text2.unread(count)}` : text2.title,
772
839
  onClick: () => setOpen((v) => !v),
773
840
  children: [
774
- /* @__PURE__ */ jsx13("span", { className: "pt-bell__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs11("svg", { viewBox: "0 0 16 16", width: "15", height: "15", children: [
775
- /* @__PURE__ */ jsx13(
841
+ /* @__PURE__ */ jsx14("span", { className: "pt-bell__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs12("svg", { viewBox: "0 0 16 16", width: "15", height: "15", children: [
842
+ /* @__PURE__ */ jsx14(
776
843
  "path",
777
844
  {
778
845
  d: "M8 1.6a3.6 3.6 0 0 0-3.6 3.6v2.3L3.1 10.2h9.8l-1.3-2.7V5.2A3.6 3.6 0 0 0 8 1.6Z",
@@ -782,17 +849,17 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
782
849
  strokeLinejoin: "round"
783
850
  }
784
851
  ),
785
- /* @__PURE__ */ jsx13("path", { d: "M6.5 12a1.5 1.5 0 0 0 3 0", fill: "none", stroke: "currentColor", strokeWidth: "1.3" })
852
+ /* @__PURE__ */ jsx14("path", { d: "M6.5 12a1.5 1.5 0 0 0 3 0", fill: "none", stroke: "currentColor", strokeWidth: "1.3" })
786
853
  ] }) }),
787
- /* @__PURE__ */ jsx13("span", { className: "pt-sr-only", children: count ? text2.unread(count) : text2.title }),
788
- count > 0 && /* @__PURE__ */ jsx13("span", { className: "pt-bell__count", "aria-hidden": "true", children: count > 99 ? "99+" : count })
854
+ /* @__PURE__ */ jsx14("span", { className: "pt-sr-only", children: count ? text2.unread(count) : text2.title }),
855
+ count > 0 && /* @__PURE__ */ jsx14("span", { className: "pt-bell__count", "aria-hidden": "true", children: count > 99 ? "99+" : count })
789
856
  ]
790
857
  }
791
858
  ),
792
- open && /* @__PURE__ */ jsxs11("div", { className: "pt-bell__panel", role: "dialog", "aria-label": text2.title, children: [
793
- /* @__PURE__ */ jsxs11("div", { className: "pt-bell__head", children: [
794
- /* @__PURE__ */ jsx13("p", { className: "pt-bell__title", children: text2.title }),
795
- count > 0 && /* @__PURE__ */ jsx13(
859
+ open && /* @__PURE__ */ jsxs12("div", { className: "pt-bell__panel", role: "dialog", "aria-label": text2.title, children: [
860
+ /* @__PURE__ */ jsxs12("div", { className: "pt-bell__head", children: [
861
+ /* @__PURE__ */ jsx14("p", { className: "pt-bell__title", children: text2.title }),
862
+ count > 0 && /* @__PURE__ */ jsx14(
796
863
  "button",
797
864
  {
798
865
  type: "button",
@@ -802,7 +869,7 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
802
869
  }
803
870
  )
804
871
  ] }),
805
- count === 0 ? /* @__PURE__ */ jsx13("p", { className: "pt-bell__empty", children: text2.empty }) : /* @__PURE__ */ jsx13("ul", { className: "pt-bell__list", children: unread.map((item) => /* @__PURE__ */ jsx13("li", { children: /* @__PURE__ */ jsxs11(
872
+ count === 0 ? /* @__PURE__ */ jsx14("p", { className: "pt-bell__empty", children: text2.empty }) : /* @__PURE__ */ jsx14("ul", { className: "pt-bell__list", children: unread.map((item) => /* @__PURE__ */ jsx14("li", { children: /* @__PURE__ */ jsxs12(
806
873
  "button",
807
874
  {
808
875
  type: "button",
@@ -813,11 +880,11 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
813
880
  if (item.onOpen) setOpen(false);
814
881
  },
815
882
  children: [
816
- /* @__PURE__ */ jsx13("span", { className: "pt-bell__mark", "aria-hidden": "true" }),
817
- /* @__PURE__ */ jsxs11("span", { className: "pt-bell__body", children: [
818
- /* @__PURE__ */ jsx13("span", { className: "pt-bell__item-title", children: item.title }),
819
- item.detail && /* @__PURE__ */ jsx13("span", { className: "pt-bell__detail", children: item.detail }),
820
- item.at && /* @__PURE__ */ jsx13("span", { className: "pt-bell__at", children: item.at })
883
+ /* @__PURE__ */ jsx14("span", { className: "pt-bell__mark", "aria-hidden": "true" }),
884
+ /* @__PURE__ */ jsxs12("span", { className: "pt-bell__body", children: [
885
+ /* @__PURE__ */ jsx14("span", { className: "pt-bell__item-title", children: item.title }),
886
+ item.detail && /* @__PURE__ */ jsx14("span", { className: "pt-bell__detail", children: item.detail }),
887
+ item.at && /* @__PURE__ */ jsx14("span", { className: "pt-bell__at", children: item.at })
821
888
  ] })
822
889
  ]
823
890
  }
@@ -827,8 +894,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
827
894
  }
828
895
 
829
896
  // src/components/CopyBlock/CopyBlock.tsx
830
- import { useCallback as useCallback4, useEffect as useEffect6, useRef as useRef5, useState as useState4 } from "react";
831
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
897
+ import { useCallback as useCallback4, useEffect as useEffect6, useRef as useRef6, useState as useState4 } from "react";
898
+ import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
832
899
  var DEFAULT_LABELS2 = {
833
900
  copy: "Copy",
834
901
  copied: "Copied",
@@ -837,8 +904,8 @@ var DEFAULT_LABELS2 = {
837
904
  function CopyBlock({ text: text2, label, note, labels }) {
838
905
  const words = { ...DEFAULT_LABELS2, ...labels };
839
906
  const [result, setResult] = useState4("idle");
840
- const pre = useRef5(null);
841
- const timer = useRef5(void 0);
907
+ const pre = useRef6(null);
908
+ const timer = useRef6(void 0);
842
909
  useEffect6(() => () => window.clearTimeout(timer.current), []);
843
910
  const announce = useCallback4((next) => {
844
911
  setResult(next);
@@ -869,21 +936,21 @@ function CopyBlock({ text: text2, label, note, labels }) {
869
936
  }
870
937
  if (select()) announce("selected");
871
938
  }, [announce, select, text2]);
872
- return /* @__PURE__ */ jsxs12("div", { className: "pt-copy", children: [
873
- /* @__PURE__ */ jsxs12("div", { className: "pt-copy__head", children: [
874
- /* @__PURE__ */ jsxs12("div", { className: "pt-copy__meta", children: [
875
- label && /* @__PURE__ */ jsx14("p", { className: "pt-copy__label", children: label }),
876
- note && /* @__PURE__ */ jsx14("p", { className: "pt-copy__note", children: note })
939
+ return /* @__PURE__ */ jsxs13("div", { className: "pt-copy", children: [
940
+ /* @__PURE__ */ jsxs13("div", { className: "pt-copy__head", children: [
941
+ /* @__PURE__ */ jsxs13("div", { className: "pt-copy__meta", children: [
942
+ label && /* @__PURE__ */ jsx15("p", { className: "pt-copy__label", children: label }),
943
+ note && /* @__PURE__ */ jsx15("p", { className: "pt-copy__note", children: note })
877
944
  ] }),
878
- /* @__PURE__ */ jsx14("button", { type: "button", className: "pt-copy__button", onClick: copy, children: result === "copied" ? words.copied : result === "selected" ? words.selected : words.copy })
945
+ /* @__PURE__ */ jsx15("button", { type: "button", className: "pt-copy__button", onClick: copy, children: result === "copied" ? words.copied : result === "selected" ? words.selected : words.copy })
879
946
  ] }),
880
- /* @__PURE__ */ jsx14("div", { className: "pt-copy__body", children: /* @__PURE__ */ jsx14("pre", { className: "pt-copy__text", ref: pre, children: text2 }) }),
881
- /* @__PURE__ */ jsx14("p", { className: "pt-sr-only", role: "status", children: result === "copied" ? words.copied : result === "selected" ? words.selected : "" })
947
+ /* @__PURE__ */ jsx15("div", { className: "pt-copy__body", children: /* @__PURE__ */ jsx15("pre", { className: "pt-copy__text", ref: pre, children: text2 }) }),
948
+ /* @__PURE__ */ jsx15("p", { className: "pt-sr-only", role: "status", children: result === "copied" ? words.copied : result === "selected" ? words.selected : "" })
882
949
  ] });
883
950
  }
884
951
 
885
952
  // src/components/Setup/SetupGuide.tsx
886
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
953
+ import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
887
954
  var DEFAULT_LABELS3 = {
888
955
  ok: "in place",
889
956
  missing: "not set",
@@ -894,23 +961,23 @@ function SetupGuide({ requirements, readyMessage, labels }) {
894
961
  const text2 = { ...DEFAULT_LABELS3, ...labels };
895
962
  const missing = requirements.filter((r) => r.status === "missing");
896
963
  const allOk = requirements.length > 0 && missing.length === 0;
897
- return /* @__PURE__ */ jsxs13("div", { className: "pt-setup", children: [
898
- /* @__PURE__ */ jsx15("ul", { className: "pt-setup__list", children: requirements.map((requirement) => /* @__PURE__ */ jsxs13("li", { className: `pt-setup__item is-${requirement.status}`, children: [
899
- /* @__PURE__ */ jsx15("span", { className: "pt-setup__mark", "aria-hidden": "true" }),
900
- /* @__PURE__ */ jsxs13("div", { className: "pt-setup__main", children: [
901
- /* @__PURE__ */ jsxs13("p", { className: "pt-setup__label", children: [
964
+ return /* @__PURE__ */ jsxs14("div", { className: "pt-setup", children: [
965
+ /* @__PURE__ */ jsx16("ul", { className: "pt-setup__list", children: requirements.map((requirement) => /* @__PURE__ */ jsxs14("li", { className: `pt-setup__item is-${requirement.status}`, children: [
966
+ /* @__PURE__ */ jsx16("span", { className: "pt-setup__mark", "aria-hidden": "true" }),
967
+ /* @__PURE__ */ jsxs14("div", { className: "pt-setup__main", children: [
968
+ /* @__PURE__ */ jsxs14("p", { className: "pt-setup__label", children: [
902
969
  requirement.label,
903
- /* @__PURE__ */ jsx15("span", { className: "pt-setup__state", children: text2[requirement.status] })
970
+ /* @__PURE__ */ jsx16("span", { className: "pt-setup__state", children: text2[requirement.status] })
904
971
  ] }),
905
- requirement.variable && /* @__PURE__ */ jsx15("p", { className: "pt-setup__var", children: requirement.variable }),
906
- requirement.enables && /* @__PURE__ */ jsx15("p", { className: "pt-setup__enables", children: requirement.enables }),
907
- requirement.status !== "ok" && requirement.fix && /* @__PURE__ */ jsxs13("div", { className: "pt-setup__fix", children: [
908
- /* @__PURE__ */ jsx15("p", { className: "pt-setup__fix-title", children: text2.whatToDo }),
972
+ requirement.variable && /* @__PURE__ */ jsx16("p", { className: "pt-setup__var", children: requirement.variable }),
973
+ requirement.enables && /* @__PURE__ */ jsx16("p", { className: "pt-setup__enables", children: requirement.enables }),
974
+ requirement.status !== "ok" && requirement.fix && /* @__PURE__ */ jsxs14("div", { className: "pt-setup__fix", children: [
975
+ /* @__PURE__ */ jsx16("p", { className: "pt-setup__fix-title", children: text2.whatToDo }),
909
976
  requirement.fix
910
977
  ] })
911
978
  ] })
912
979
  ] }, requirement.id)) }),
913
- allOk && readyMessage && /* @__PURE__ */ jsx15("p", { className: "pt-setup__ready", children: readyMessage })
980
+ allOk && readyMessage && /* @__PURE__ */ jsx16("p", { className: "pt-setup__ready", children: readyMessage })
914
981
  ] });
915
982
  }
916
983
 
@@ -941,7 +1008,7 @@ function isFirstRun(board) {
941
1008
  }
942
1009
 
943
1010
  // src/components/Setup/SetupWizard.tsx
944
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
1011
+ import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
945
1012
  function SetupWizard({ requirements, labels, onCheck, onClose }) {
946
1013
  const step = wizardStep(requirements);
947
1014
  const [checking, setChecking] = useState5(false);
@@ -964,37 +1031,37 @@ function SetupWizard({ requirements, labels, onCheck, onClose }) {
964
1031
  } catch {
965
1032
  }
966
1033
  }
967
- return /* @__PURE__ */ jsxs14("section", { className: "pt-wizard", "aria-labelledby": "pt-wizard-title", children: [
968
- /* @__PURE__ */ jsxs14("header", { className: "pt-wizard__head", children: [
969
- /* @__PURE__ */ jsx16("h2", { className: "pt-h2", id: "pt-wizard-title", children: labels.title }),
970
- step.current && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__progress", children: labels.progress(step.index, step.total) })
1034
+ return /* @__PURE__ */ jsxs15("section", { className: "pt-wizard", "aria-labelledby": "pt-wizard-title", children: [
1035
+ /* @__PURE__ */ jsxs15("header", { className: "pt-wizard__head", children: [
1036
+ /* @__PURE__ */ jsx17("h2", { className: "pt-h2", id: "pt-wizard-title", children: labels.title }),
1037
+ step.current && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__progress", children: labels.progress(step.index, step.total) })
971
1038
  ] }),
972
- step.current ? /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__step", children: [
973
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__now", children: labels.nowDo }),
974
- /* @__PURE__ */ jsx16("h3", { className: "pt-wizard__label", children: step.current.label }),
975
- step.current.variable && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__var", children: step.current.variable }),
976
- step.current.enables && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__enables", children: step.current.enables }),
977
- step.current.fix && /* @__PURE__ */ jsx16("div", { className: "pt-wizard__fix", children: step.current.fix }),
978
- /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__actions", children: [
979
- /* @__PURE__ */ jsx16("button", { type: "button", className: "pt-btn pt-btn--primary", onClick: check, disabled: checking, children: checking ? labels.checking : labels.check }),
980
- checked && !checking && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__said", children: step.unknown ? labels.cannotTell : labels.stillMissing })
1039
+ step.current ? /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__step", children: [
1040
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__now", children: labels.nowDo }),
1041
+ /* @__PURE__ */ jsx17("h3", { className: "pt-wizard__label", children: step.current.label }),
1042
+ step.current.variable && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__var", children: step.current.variable }),
1043
+ step.current.enables && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__enables", children: step.current.enables }),
1044
+ step.current.fix && /* @__PURE__ */ jsx17("div", { className: "pt-wizard__fix", children: step.current.fix }),
1045
+ /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__actions", children: [
1046
+ /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-btn pt-btn--primary", onClick: check, disabled: checking, children: checking ? labels.checking : labels.check }),
1047
+ checked && !checking && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__said", children: step.unknown ? labels.cannotTell : labels.stillMissing })
981
1048
  ] })
982
- ] }) : /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__step pt-wizard__step--done", children: [
983
- /* @__PURE__ */ jsx16("h3", { className: "pt-wizard__label", children: labels.readyTitle }),
984
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__enables", children: labels.readyBody }),
985
- /* @__PURE__ */ jsx16("ol", { className: "pt-wizard__verify", children: labels.verify.map((line) => /* @__PURE__ */ jsx16("li", { children: line }, line)) })
1049
+ ] }) : /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__step pt-wizard__step--done", children: [
1050
+ /* @__PURE__ */ jsx17("h3", { className: "pt-wizard__label", children: labels.readyTitle }),
1051
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__enables", children: labels.readyBody }),
1052
+ /* @__PURE__ */ jsx17("ol", { className: "pt-wizard__verify", children: labels.verify.map((line) => /* @__PURE__ */ jsx17("li", { children: line }, line)) })
986
1053
  ] }),
987
- step.done.length > 0 && /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__done", children: [
988
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__done-title", children: labels.doneTitle }),
989
- /* @__PURE__ */ jsx16("ul", { children: step.done.map((requirement) => /* @__PURE__ */ jsx16("li", { children: requirement.label }, requirement.id)) })
1054
+ step.done.length > 0 && /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__done", children: [
1055
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__done-title", children: labels.doneTitle }),
1056
+ /* @__PURE__ */ jsx17("ul", { children: step.done.map((requirement) => /* @__PURE__ */ jsx17("li", { children: requirement.label }, requirement.id)) })
990
1057
  ] }),
991
- /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__stuck", children: [
992
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__done-title", children: labels.stuckTitle }),
993
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__enables", children: labels.stuckBody }),
994
- /* @__PURE__ */ jsx16("pre", { className: "pt-wizard__prompt", children: labels.stuckPrompt }),
995
- /* @__PURE__ */ jsx16("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: copyPrompt, children: copied ? labels.copied : labels.copy })
1058
+ /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__stuck", children: [
1059
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__done-title", children: labels.stuckTitle }),
1060
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__enables", children: labels.stuckBody }),
1061
+ /* @__PURE__ */ jsx17("pre", { className: "pt-wizard__prompt", children: labels.stuckPrompt }),
1062
+ /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: copyPrompt, children: copied ? labels.copied : labels.copy })
996
1063
  ] }),
997
- onClose && /* @__PURE__ */ jsx16("div", { className: "pt-wizard__actions", children: /* @__PURE__ */ jsx16("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onClose, children: labels.close }) })
1064
+ onClose && /* @__PURE__ */ jsx17("div", { className: "pt-wizard__actions", children: /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onClose, children: labels.close }) })
998
1065
  ] });
999
1066
  }
1000
1067
 
@@ -1171,6 +1238,12 @@ function stampForColumn(card, columns) {
1171
1238
  if (column.active && !next.startedAt) next.startedAt = today();
1172
1239
  return next;
1173
1240
  }
1241
+ function queueColumn(columns) {
1242
+ const next = columns.find((column) => column.id === "next");
1243
+ if (next) return next.id;
1244
+ const queued = columns.find((column) => !column.active && !column.done && column.id !== "yours");
1245
+ return (queued ?? columns[0])?.id ?? "next";
1246
+ }
1174
1247
  function claimedWithoutStarting(card) {
1175
1248
  return Boolean(card.completedAt) && !card.startedAt;
1176
1249
  }
@@ -1592,12 +1665,19 @@ var UI = {
1592
1665
  filterForClaude: "For Claude",
1593
1666
  filterYours: "Waiting on you",
1594
1667
  filterHighRisk: "High risk",
1668
+ situationBlocking: "What is waiting on you",
1669
+ situationClear: "Nothing is waiting on you. Every open card is either being worked or is Claude\u2019s to pick up.",
1670
+ situationStatus: "System",
1671
+ situationYoursHint: "Yours to finish \u2014 Claude will not touch these",
1672
+ situationDecisionsHint: "Questions nobody has answered yet",
1673
+ situationOrdersHint: "Asked for \u2014 waiting on Claude",
1595
1674
  statOpen: "Open",
1596
1675
  statOrders: "Orders",
1597
1676
  statYours: "For you",
1598
1677
  statDecisions: "Decisions",
1599
1678
  statHighRisk: "High risk",
1600
1679
  statDone: "Done",
1680
+ statArchived: "Archived",
1601
1681
  theme: "Theme",
1602
1682
  themeSubtitle: "the only thing that changes between projects",
1603
1683
  themeNote: "The structure does not move: only the palette handed to the theme provider changes.",
@@ -1628,9 +1708,10 @@ var UI = {
1628
1708
  needTokenEnables: "Lets Save commit the board back to the repository. Without it everything else works and Save fails.",
1629
1709
  needRepo: "The repository to write to",
1630
1710
  needRepoEnables: "Which repository the board is committed to. There is no default on purpose: writing to the wrong one is worse than not writing.",
1631
- archivedOne: "archived \u2014 finished over a week ago",
1632
- archivedMany: "archived \u2014 finished over a week ago",
1633
- archivedHide: "Hide them again",
1711
+ archiveTitle: "Archive",
1712
+ archiveHeading: "Finished, and out of the way",
1713
+ archiveIntro: "Cards that reached Done over a week ago. They are still on the board file and nothing has been deleted \u2014 they are simply no longer in the way of the work that is not finished.",
1714
+ archiveFinished: (date) => `Finished ${date}`,
1634
1715
  needGate: "The gate this project copied",
1635
1716
  needGateEnables: "The sign-in, the session and the write-back are files this project owns, copied once and never updated with the library. When one of them is older than the package, the panel does not look misconfigured \u2014 it looks broken.",
1636
1717
  fixGate: "The gate is older than the installed kit. See what changed before replacing anything:",
@@ -1919,12 +2000,19 @@ var UI = {
1919
2000
  filterForClaude: "Para Claude",
1920
2001
  filterYours: "Depende de ti",
1921
2002
  filterHighRisk: "Riesgo alto",
2003
+ situationBlocking: "Lo que te bloquea a ti",
2004
+ situationClear: "Nada espera por ti. Cada tarjeta abierta o est\xE1 en marcha o le toca a Claude.",
2005
+ situationStatus: "Sistema",
2006
+ situationYoursHint: "Tuyas para terminar: Claude no las toca",
2007
+ situationDecisionsHint: "Preguntas que nadie ha contestado todav\xEDa",
2008
+ situationOrdersHint: "Pedidas: esperando a Claude",
1922
2009
  statOpen: "Abiertas",
1923
2010
  statOrders: "\xD3rdenes",
1924
2011
  statYours: "Para ti",
1925
2012
  statDecisions: "Decisiones",
1926
2013
  statHighRisk: "Riesgo alto",
1927
2014
  statDone: "Hecho",
2015
+ statArchived: "Archivadas",
1928
2016
  theme: "Tema",
1929
2017
  themeSubtitle: "lo \xFAnico que cambia entre proyectos",
1930
2018
  themeNote: "La estructura no se mueve: cambia solo la paleta que recibe el proveedor de tema.",
@@ -1955,9 +2043,10 @@ var UI = {
1955
2043
  needTokenEnables: "Permite que Guardar confirme el tablero en el repositorio. Sin \xE9l todo lo dem\xE1s funciona y Guardar falla.",
1956
2044
  needRepo: "El repositorio donde escribir",
1957
2045
  needRepoEnables: "En qu\xE9 repositorio se confirma el tablero. No hay valor por defecto a prop\xF3sito: escribir en el equivocado es peor que no escribir.",
1958
- archivedOne: "archivada \u2014 terminada hace m\xE1s de una semana",
1959
- archivedMany: "archivadas \u2014 terminadas hace m\xE1s de una semana",
1960
- archivedHide: "Volver a esconderlas",
2046
+ archiveTitle: "Archivo",
2047
+ archiveHeading: "Terminadas, y fuera de en medio",
2048
+ archiveIntro: "Tarjetas que llegaron a Hecho hace m\xE1s de una semana. Siguen en el archivo del tablero y no se ha borrado nada: simplemente ya no estorban al trabajo que no est\xE1 terminado.",
2049
+ archiveFinished: (date) => `Terminada el ${date}`,
1961
2050
  needGate: "La puerta que copi\xF3 este proyecto",
1962
2051
  needGateEnables: "El acceso, la sesi\xF3n y la escritura de vuelta son archivos de este proyecto, copiados una vez y que no se actualizan con la librer\xEDa. Cuando uno se queda m\xE1s viejo que el paquete, el panel no parece mal configurado: parece roto.",
1963
2052
  fixGate: "La puerta es m\xE1s vieja que el kit instalado. Mira qu\xE9 cambi\xF3 antes de reemplazar nada:",
@@ -2178,7 +2267,7 @@ var UI = {
2178
2267
  };
2179
2268
 
2180
2269
  // src/panel/AnalysisView.tsx
2181
- import { Fragment as Fragment3, jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
2270
+ import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2182
2271
  var SUGGESTION_STATUSES = ["new", "doing", "done", "dismissed"];
2183
2272
  function MetricTile({ metric, lang, ui }) {
2184
2273
  const { latest, delta, against } = trendOf(metric);
@@ -2187,23 +2276,23 @@ function MetricTile({ metric, lang, ui }) {
2187
2276
  const height = 34;
2188
2277
  const path = points.map((point) => `${(point.x * width).toFixed(1)},${(point.y * (height - 6) + 3).toFixed(1)}`);
2189
2278
  const last = points[points.length - 1];
2190
- return /* @__PURE__ */ jsxs15("article", { className: "pt-metric", children: [
2191
- /* @__PURE__ */ jsx17("p", { className: "pt-metric__label", children: text(metric.label, lang) }),
2192
- /* @__PURE__ */ jsxs15("p", { className: "pt-metric__value", children: [
2279
+ return /* @__PURE__ */ jsxs16("article", { className: "pt-metric", children: [
2280
+ /* @__PURE__ */ jsx18("p", { className: "pt-metric__label", children: text(metric.label, lang) }),
2281
+ /* @__PURE__ */ jsxs16("p", { className: "pt-metric__value", children: [
2193
2282
  latest ? latest.value : "\u2014",
2194
- /* @__PURE__ */ jsx17("span", { className: "pt-metric__unit", children: metric.unit })
2283
+ /* @__PURE__ */ jsx18("span", { className: "pt-metric__unit", children: metric.unit })
2195
2284
  ] }),
2196
- delta !== null && /* @__PURE__ */ jsxs15("p", { className: `pt-metric__delta${against ? " is-against" : " is-with"}`, children: [
2285
+ delta !== null && /* @__PURE__ */ jsxs16("p", { className: `pt-metric__delta${against ? " is-against" : " is-with"}`, children: [
2197
2286
  delta > 0 ? "\u25B2" : delta < 0 ? "\u25BC" : "\u25A0",
2198
2287
  " ",
2199
2288
  delta > 0 ? "+" : "",
2200
2289
  delta,
2201
- /* @__PURE__ */ jsxs15("span", { className: "pt-metric__since", children: [
2290
+ /* @__PURE__ */ jsxs16("span", { className: "pt-metric__since", children: [
2202
2291
  " \xB7 ",
2203
2292
  against ? ui.metricAgainst : ui.metricWith
2204
2293
  ] })
2205
2294
  ] }),
2206
- points.length > 1 && /* @__PURE__ */ jsxs15(
2295
+ points.length > 1 && /* @__PURE__ */ jsxs16(
2207
2296
  "svg",
2208
2297
  {
2209
2298
  className: "pt-metric__spark",
@@ -2213,12 +2302,12 @@ function MetricTile({ metric, lang, ui }) {
2213
2302
  role: "img",
2214
2303
  "aria-label": `${text(metric.label, lang)}: ${metric.readings.map((r) => `${r.date} ${r.value}`).join(", ")}`,
2215
2304
  children: [
2216
- /* @__PURE__ */ jsx17("polyline", { points: path.join(" "), fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }),
2217
- last && /* @__PURE__ */ jsx17("circle", { cx: last.x * width, cy: last.y * (height - 6) + 3, r: "3.5", className: "pt-metric__point" })
2305
+ /* @__PURE__ */ jsx18("polyline", { points: path.join(" "), fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }),
2306
+ last && /* @__PURE__ */ jsx18("circle", { cx: last.x * width, cy: last.y * (height - 6) + 3, r: "3.5", className: "pt-metric__point" })
2218
2307
  ]
2219
2308
  }
2220
2309
  ),
2221
- latest?.note && /* @__PURE__ */ jsx17("p", { className: "pt-metric__note", children: text(latest.note, lang) })
2310
+ latest?.note && /* @__PURE__ */ jsx18("p", { className: "pt-metric__note", children: text(latest.note, lang) })
2222
2311
  ] });
2223
2312
  }
2224
2313
  function ChoiceCard({
@@ -2229,11 +2318,11 @@ function ChoiceCard({
2229
2318
  onDecide
2230
2319
  }) {
2231
2320
  const answered = choice.options.find((option) => option.id === choice.value);
2232
- return /* @__PURE__ */ jsxs15("article", { className: `pt-choice${answered ? " is-decided" : ""}`, children: [
2233
- /* @__PURE__ */ jsx17("p", { className: "pt-choice__state", children: answered ? ui.choiceDecidedAt(choice.decidedAt ?? "") : ui.choiceOpen }),
2234
- /* @__PURE__ */ jsx17("p", { className: "pt-choice__question", children: text(choice.question, lang) }),
2235
- choice.why && /* @__PURE__ */ jsx17("p", { className: "pt-choice__why", children: text(choice.why, lang) }),
2236
- /* @__PURE__ */ jsx17("div", { className: "pt-panel-row pt-choice__options", children: choice.options.map((option) => /* @__PURE__ */ jsx17(
2321
+ return /* @__PURE__ */ jsxs16("article", { className: `pt-choice${answered ? " is-decided" : ""}`, children: [
2322
+ /* @__PURE__ */ jsx18("p", { className: "pt-choice__state", children: answered ? ui.choiceDecidedAt(choice.decidedAt ?? "") : ui.choiceOpen }),
2323
+ /* @__PURE__ */ jsx18("p", { className: "pt-choice__question", children: text(choice.question, lang) }),
2324
+ choice.why && /* @__PURE__ */ jsx18("p", { className: "pt-choice__why", children: text(choice.why, lang) }),
2325
+ /* @__PURE__ */ jsx18("div", { className: "pt-panel-row pt-choice__options", children: choice.options.map((option) => /* @__PURE__ */ jsx18(
2237
2326
  FilterChip,
2238
2327
  {
2239
2328
  label: text(option.label, lang),
@@ -2242,8 +2331,8 @@ function ChoiceCard({
2242
2331
  },
2243
2332
  option.id
2244
2333
  )) }),
2245
- answered?.detail && /* @__PURE__ */ jsx17("p", { className: "pt-choice__detail", children: text(answered.detail, lang) }),
2246
- answered && /* @__PURE__ */ jsx17(
2334
+ answered?.detail && /* @__PURE__ */ jsx18("p", { className: "pt-choice__detail", children: text(answered.detail, lang) }),
2335
+ answered && /* @__PURE__ */ jsx18(
2247
2336
  "button",
2248
2337
  {
2249
2338
  type: "button",
@@ -2262,10 +2351,10 @@ function Choices({
2262
2351
  onDecide
2263
2352
  }) {
2264
2353
  const choices = analysis.choices?.[section] ?? [];
2265
- return /* @__PURE__ */ jsxs15("section", { children: [
2266
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.choicesTitle }),
2267
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.choicesIntro }),
2268
- choices.length === 0 ? /* @__PURE__ */ jsx17("p", { className: "pt-analysis__empty", children: ui.choicesNone }) : /* @__PURE__ */ jsx17("div", { className: "pt-choice-grid", children: choices.map((choice) => /* @__PURE__ */ jsx17(
2354
+ return /* @__PURE__ */ jsxs16("section", { children: [
2355
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.choicesTitle }),
2356
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.choicesIntro }),
2357
+ choices.length === 0 ? /* @__PURE__ */ jsx18("p", { className: "pt-analysis__empty", children: ui.choicesNone }) : /* @__PURE__ */ jsx18("div", { className: "pt-choice-grid", children: choices.map((choice) => /* @__PURE__ */ jsx18(
2269
2358
  ChoiceCard,
2270
2359
  {
2271
2360
  section,
@@ -2299,17 +2388,17 @@ function AnalysisView({
2299
2388
  const total = answers.length + open.length;
2300
2389
  const here = analysis.choices?.[section] ?? [];
2301
2390
  const answeredHere = here.filter((choice) => choice.options.some((option) => option.id === choice.value)).length;
2302
- return /* @__PURE__ */ jsxs15("div", { className: "pt-panel-page pt-panel-section pt-analysis", children: [
2303
- /* @__PURE__ */ jsxs15("section", { children: [
2304
- /* @__PURE__ */ jsx17("p", { className: "pt-eyebrow", children: ui.analysisEyebrow }),
2305
- /* @__PURE__ */ jsx17("h2", { className: "pt-h2", children: ui.analysisSections[section] }),
2306
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.analysisSectionHints[section] }),
2307
- onRequestReport && /* @__PURE__ */ jsx17("p", { className: "pt-panel-row", children: /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => onRequestReport(section), children: ui.analysisRedo }) }),
2308
- /* @__PURE__ */ jsx17("nav", { className: "pt-analysis__nav", "aria-label": ui.analysis, children: ANALYSIS_SECTIONS.map((id) => {
2391
+ return /* @__PURE__ */ jsxs16("div", { className: "pt-panel-page pt-panel-section pt-analysis", children: [
2392
+ /* @__PURE__ */ jsxs16("section", { children: [
2393
+ /* @__PURE__ */ jsx18("p", { className: "pt-eyebrow", children: ui.analysisEyebrow }),
2394
+ /* @__PURE__ */ jsx18("h2", { className: "pt-h2", children: ui.analysisSections[section] }),
2395
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.analysisSectionHints[section] }),
2396
+ onRequestReport && /* @__PURE__ */ jsx18("p", { className: "pt-panel-row", children: /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => onRequestReport(section), children: ui.analysisRedo }) }),
2397
+ /* @__PURE__ */ jsx18("nav", { className: "pt-analysis__nav", "aria-label": ui.analysis, children: ANALYSIS_SECTIONS.map((id) => {
2309
2398
  const count = (analysis.choices?.[id] ?? []).filter(
2310
2399
  (choice) => !choice.options.some((option) => option.id === choice.value)
2311
2400
  ).length;
2312
- return /* @__PURE__ */ jsxs15(
2401
+ return /* @__PURE__ */ jsxs16(
2313
2402
  "button",
2314
2403
  {
2315
2404
  type: "button",
@@ -2318,110 +2407,110 @@ function AnalysisView({
2318
2407
  onClick: () => setSection(id),
2319
2408
  children: [
2320
2409
  ui.analysisSections[id],
2321
- count > 0 && /* @__PURE__ */ jsx17("span", { className: "pt-analysis__open", "aria-hidden": "true", children: count })
2410
+ count > 0 && /* @__PURE__ */ jsx18("span", { className: "pt-analysis__open", "aria-hidden": "true", children: count })
2322
2411
  ]
2323
2412
  },
2324
2413
  id
2325
2414
  );
2326
2415
  }) }),
2327
- here.length > 0 && /* @__PURE__ */ jsxs15("p", { className: "pt-analysis__stage", children: [
2416
+ here.length > 0 && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
2328
2417
  ui.analysisAnswered(answeredHere, here.length),
2329
- answeredHere === here.length && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2418
+ answeredHere === here.length && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2330
2419
  " \xB7 ",
2331
2420
  ui.analysisAllDecided
2332
2421
  ] })
2333
2422
  ] })
2334
2423
  ] }),
2335
- section === "board" && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2336
- /* @__PURE__ */ jsxs15("section", { children: [
2337
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.boardFactsTitle }),
2338
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.boardFactsIntro }),
2339
- /* @__PURE__ */ jsx17("div", { className: "pt-fact-grid", children: [
2424
+ section === "board" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2425
+ /* @__PURE__ */ jsxs16("section", { children: [
2426
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.boardFactsTitle }),
2427
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.boardFactsIntro }),
2428
+ /* @__PURE__ */ jsx18("div", { className: "pt-fact-grid", children: [
2340
2429
  [ui.factOpen, String(facts.open)],
2341
2430
  [ui.factWaiting, String(facts.waitingOnOwner)],
2342
2431
  [ui.factOrders, String(facts.orders)],
2343
2432
  [ui.factHighRisk, String(facts.highRisk)]
2344
- ].map(([label, value]) => /* @__PURE__ */ jsxs15("article", { className: "pt-fact", children: [
2345
- /* @__PURE__ */ jsx17("p", { className: "pt-fact__label", children: label }),
2346
- /* @__PURE__ */ jsx17("p", { className: "pt-fact__value", children: value })
2433
+ ].map(([label, value]) => /* @__PURE__ */ jsxs16("article", { className: "pt-fact", children: [
2434
+ /* @__PURE__ */ jsx18("p", { className: "pt-fact__label", children: label }),
2435
+ /* @__PURE__ */ jsx18("p", { className: "pt-fact__value", children: value })
2347
2436
  ] }, label)) }),
2348
- /* @__PURE__ */ jsx17("h4", { className: "pt-analysis__minor", children: ui.factColumnsTitle }),
2349
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: facts.byColumn.map((column) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal", children: [
2350
- /* @__PURE__ */ jsx17("span", { children: t(column.title) }),
2351
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: column.count })
2437
+ /* @__PURE__ */ jsx18("h4", { className: "pt-analysis__minor", children: ui.factColumnsTitle }),
2438
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: facts.byColumn.map((column) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal", children: [
2439
+ /* @__PURE__ */ jsx18("span", { children: t(column.title) }),
2440
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: column.count })
2352
2441
  ] }, column.id)) }),
2353
- facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */ jsxs15("p", { className: "pt-analysis__stage", children: [
2442
+ facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
2354
2443
  ui.factOldest,
2355
2444
  ": ",
2356
- /* @__PURE__ */ jsx17("strong", { children: ui.factDays(facts.oldestOpenDays) }),
2445
+ /* @__PURE__ */ jsx18("strong", { children: ui.factDays(facts.oldestOpenDays) }),
2357
2446
  " \xB7 ",
2358
2447
  t(facts.oldestOpen.title)
2359
2448
  ] })
2360
2449
  ] }),
2361
- /* @__PURE__ */ jsxs15("section", { children: [
2362
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.factClaimedTitle }),
2363
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.factClaimedIntro }),
2364
- facts.claimed.length === 0 ? /* @__PURE__ */ jsx17("p", { className: "pt-analysis__empty", children: ui.factClaimedNone }) : /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: facts.claimed.map((card) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal", children: [
2365
- /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-analysis__link", onClick: () => onOpenCard?.(card.id), children: t(card.title) || ui.untitled }),
2366
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: ui.neverStarted })
2450
+ /* @__PURE__ */ jsxs16("section", { children: [
2451
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.factClaimedTitle }),
2452
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.factClaimedIntro }),
2453
+ facts.claimed.length === 0 ? /* @__PURE__ */ jsx18("p", { className: "pt-analysis__empty", children: ui.factClaimedNone }) : /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: facts.claimed.map((card) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal", children: [
2454
+ /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-analysis__link", onClick: () => onOpenCard?.(card.id), children: t(card.title) || ui.untitled }),
2455
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.neverStarted })
2367
2456
  ] }, card.id)) })
2368
2457
  ] })
2369
2458
  ] }),
2370
- section === "project" && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2371
- /* @__PURE__ */ jsxs15("section", { children: [
2372
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.briefTitle }),
2373
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: t(analysis.brief) }),
2374
- /* @__PURE__ */ jsxs15("p", { className: "pt-analysis__stage", children: [
2459
+ section === "project" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2460
+ /* @__PURE__ */ jsxs16("section", { children: [
2461
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.briefTitle }),
2462
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: t(analysis.brief) }),
2463
+ /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
2375
2464
  ui.stage,
2376
2465
  ": ",
2377
- /* @__PURE__ */ jsx17("strong", { children: analysis.stage })
2466
+ /* @__PURE__ */ jsx18("strong", { children: analysis.stage })
2378
2467
  ] })
2379
2468
  ] }),
2380
- /* @__PURE__ */ jsxs15("section", { className: "pt-analysis__split", children: [
2381
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2382
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.goalsTitle }),
2383
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: analysis.goals.map((goal) => /* @__PURE__ */ jsxs15("li", { className: `pt-analysis__goal is-${goal.weight}`, children: [
2384
- /* @__PURE__ */ jsx17("span", { children: t(goal.label) }),
2385
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: ui.weights[goal.weight] })
2469
+ /* @__PURE__ */ jsxs16("section", { className: "pt-analysis__split", children: [
2470
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2471
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.goalsTitle }),
2472
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: analysis.goals.map((goal) => /* @__PURE__ */ jsxs16("li", { className: `pt-analysis__goal is-${goal.weight}`, children: [
2473
+ /* @__PURE__ */ jsx18("span", { children: t(goal.label) }),
2474
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.weights[goal.weight] })
2386
2475
  ] }, goal.id)) })
2387
2476
  ] }),
2388
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2389
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.constraintsTitle }),
2390
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: analysis.constraints.map((constraint) => /* @__PURE__ */ jsxs15("li", { className: `pt-analysis__goal${constraint.on ? "" : " is-off"}`, children: [
2391
- /* @__PURE__ */ jsx17("span", { children: t(constraint.label) }),
2392
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: constraint.on ? ui.constraintOn : ui.constraintOff })
2477
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2478
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.constraintsTitle }),
2479
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: analysis.constraints.map((constraint) => /* @__PURE__ */ jsxs16("li", { className: `pt-analysis__goal${constraint.on ? "" : " is-off"}`, children: [
2480
+ /* @__PURE__ */ jsx18("span", { children: t(constraint.label) }),
2481
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: constraint.on ? ui.constraintOn : ui.constraintOff })
2393
2482
  ] }, constraint.id)) })
2394
2483
  ] })
2395
2484
  ] }),
2396
- /* @__PURE__ */ jsxs15("section", { children: [
2397
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.metricsTitle }),
2398
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.metricsIntro }),
2399
- /* @__PURE__ */ jsx17("div", { className: "pt-metric-grid", children: analysis.metrics.map((metric) => /* @__PURE__ */ jsx17(MetricTile, { metric, lang, ui }, metric.id)) })
2485
+ /* @__PURE__ */ jsxs16("section", { children: [
2486
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.metricsTitle }),
2487
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.metricsIntro }),
2488
+ /* @__PURE__ */ jsx18("div", { className: "pt-metric-grid", children: analysis.metrics.map((metric) => /* @__PURE__ */ jsx18(MetricTile, { metric, lang, ui }, metric.id)) })
2400
2489
  ] })
2401
2490
  ] }),
2402
- section === "strategy" && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2403
- /* @__PURE__ */ jsxs15("section", { children: [
2404
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.strategiesTitle }),
2405
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: analysis.chosen ? ui.strategyChosenHint : ui.strategyOpenHint }),
2406
- /* @__PURE__ */ jsx17("div", { className: "pt-strategy-grid", children: analysis.strategies.map((strategy) => {
2491
+ section === "strategy" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2492
+ /* @__PURE__ */ jsxs16("section", { children: [
2493
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.strategiesTitle }),
2494
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: analysis.chosen ? ui.strategyChosenHint : ui.strategyOpenHint }),
2495
+ /* @__PURE__ */ jsx18("div", { className: "pt-strategy-grid", children: analysis.strategies.map((strategy) => {
2407
2496
  const chosen = analysis.chosen === strategy.id;
2408
- return /* @__PURE__ */ jsxs15("article", { className: `pt-strategy pt-hud${chosen ? " is-chosen" : ""}`, children: [
2409
- /* @__PURE__ */ jsx17("h4", { className: "pt-strategy__title", children: t(strategy.title) }),
2410
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(strategy.thesis) }),
2411
- /* @__PURE__ */ jsx17("dl", { className: "pt-strategy__meters", children: [
2497
+ return /* @__PURE__ */ jsxs16("article", { className: `pt-strategy pt-hud${chosen ? " is-chosen" : ""}`, children: [
2498
+ /* @__PURE__ */ jsx18("h4", { className: "pt-strategy__title", children: t(strategy.title) }),
2499
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(strategy.thesis) }),
2500
+ /* @__PURE__ */ jsx18("dl", { className: "pt-strategy__meters", children: [
2412
2501
  [ui.effort, strategy.effort],
2413
2502
  [ui.riskShort, strategy.risk],
2414
2503
  [ui.upside, strategy.upside]
2415
- ].map(([label, value]) => /* @__PURE__ */ jsxs15("div", { children: [
2416
- /* @__PURE__ */ jsx17("dt", { children: label }),
2417
- /* @__PURE__ */ jsxs15("dd", { children: [
2418
- /* @__PURE__ */ jsx17("span", { className: "pt-strategy__track", children: /* @__PURE__ */ jsx17("span", { className: "pt-strategy__fill", style: { width: `${value * 10}%` } }) }),
2419
- /* @__PURE__ */ jsx17("b", { children: value })
2504
+ ].map(([label, value]) => /* @__PURE__ */ jsxs16("div", { children: [
2505
+ /* @__PURE__ */ jsx18("dt", { children: label }),
2506
+ /* @__PURE__ */ jsxs16("dd", { children: [
2507
+ /* @__PURE__ */ jsx18("span", { className: "pt-strategy__track", children: /* @__PURE__ */ jsx18("span", { className: "pt-strategy__fill", style: { width: `${value * 10}%` } }) }),
2508
+ /* @__PURE__ */ jsx18("b", { children: value })
2420
2509
  ] })
2421
2510
  ] }, label)) }),
2422
- /* @__PURE__ */ jsx17("p", { className: "pt-strategy__horizon", children: t(strategy.horizon) }),
2423
- /* @__PURE__ */ jsx17("ul", { className: "pt-cap__list", children: strategy.moves.map((move) => /* @__PURE__ */ jsx17("li", { children: t(move) }, t(move))) }),
2424
- /* @__PURE__ */ jsx17(
2511
+ /* @__PURE__ */ jsx18("p", { className: "pt-strategy__horizon", children: t(strategy.horizon) }),
2512
+ /* @__PURE__ */ jsx18("ul", { className: "pt-cap__list", children: strategy.moves.map((move) => /* @__PURE__ */ jsx18("li", { children: t(move) }, t(move))) }),
2513
+ /* @__PURE__ */ jsx18(
2425
2514
  FilterChip,
2426
2515
  {
2427
2516
  label: chosen ? ui.strategyChosen : ui.strategyChoose,
@@ -2432,19 +2521,19 @@ function AnalysisView({
2432
2521
  ] }, strategy.id);
2433
2522
  }) })
2434
2523
  ] }),
2435
- /* @__PURE__ */ jsxs15("section", { children: [
2436
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.suggestionsTitle }),
2437
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.suggestionsIntro }),
2438
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__suggestions", children: analysis.suggestions.map((suggestion) => /* @__PURE__ */ jsxs15("li", { className: `pt-suggestion pt-hud is-${suggestion.severity}`, children: [
2439
- /* @__PURE__ */ jsxs15("p", { className: "pt-suggestion__meta", children: [
2524
+ /* @__PURE__ */ jsxs16("section", { children: [
2525
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.suggestionsTitle }),
2526
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.suggestionsIntro }),
2527
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__suggestions", children: analysis.suggestions.map((suggestion) => /* @__PURE__ */ jsxs16("li", { className: `pt-suggestion pt-hud is-${suggestion.severity}`, children: [
2528
+ /* @__PURE__ */ jsxs16("p", { className: "pt-suggestion__meta", children: [
2440
2529
  suggestion.area,
2441
2530
  " \xB7 ",
2442
2531
  ui.severities[suggestion.severity],
2443
2532
  " \xB7 ",
2444
2533
  suggestion.date
2445
2534
  ] }),
2446
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(suggestion.text) }),
2447
- /* @__PURE__ */ jsx17("div", { className: "pt-panel-row", children: SUGGESTION_STATUSES.map((status) => /* @__PURE__ */ jsx17(
2535
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(suggestion.text) }),
2536
+ /* @__PURE__ */ jsx18("div", { className: "pt-panel-row", children: SUGGESTION_STATUSES.map((status) => /* @__PURE__ */ jsx18(
2448
2537
  FilterChip,
2449
2538
  {
2450
2539
  label: ui.suggestionStatuses[status],
@@ -2456,67 +2545,67 @@ function AnalysisView({
2456
2545
  ] }, suggestion.id)) })
2457
2546
  ] })
2458
2547
  ] }),
2459
- section === "market" && /* @__PURE__ */ jsx17("section", { children: analysis.market ? /* @__PURE__ */ jsxs15(Fragment3, { children: [
2460
- /* @__PURE__ */ jsxs15("div", { className: "pt-analysis__split", children: [
2461
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2462
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.audienceTitle }),
2463
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(analysis.market.audience) })
2548
+ section === "market" && /* @__PURE__ */ jsx18("section", { children: analysis.market ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
2549
+ /* @__PURE__ */ jsxs16("div", { className: "pt-analysis__split", children: [
2550
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2551
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.audienceTitle }),
2552
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(analysis.market.audience) })
2464
2553
  ] }),
2465
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2466
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.positioningTitle }),
2467
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(analysis.market.positioning) })
2554
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2555
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.positioningTitle }),
2556
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(analysis.market.positioning) })
2468
2557
  ] })
2469
2558
  ] }),
2470
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.competitorsTitle }),
2471
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.marketIntro }),
2472
- /* @__PURE__ */ jsx17("div", { className: "pt-rival-grid", children: analysis.market.competitors.map((rival) => /* @__PURE__ */ jsxs15("article", { className: "pt-rival pt-hud", children: [
2473
- /* @__PURE__ */ jsx17("h4", { className: "pt-rival__name", children: rival.name }),
2474
- /* @__PURE__ */ jsxs15("p", { className: "pt-rival__line", children: [
2475
- /* @__PURE__ */ jsx17("span", { className: "pt-rival__tag", children: ui.competitorStrength }),
2559
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.competitorsTitle }),
2560
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.marketIntro }),
2561
+ /* @__PURE__ */ jsx18("div", { className: "pt-rival-grid", children: analysis.market.competitors.map((rival) => /* @__PURE__ */ jsxs16("article", { className: "pt-rival pt-hud", children: [
2562
+ /* @__PURE__ */ jsx18("h4", { className: "pt-rival__name", children: rival.name }),
2563
+ /* @__PURE__ */ jsxs16("p", { className: "pt-rival__line", children: [
2564
+ /* @__PURE__ */ jsx18("span", { className: "pt-rival__tag", children: ui.competitorStrength }),
2476
2565
  t(rival.strength)
2477
2566
  ] }),
2478
- /* @__PURE__ */ jsxs15("p", { className: "pt-rival__line is-gap", children: [
2479
- /* @__PURE__ */ jsx17("span", { className: "pt-rival__tag", children: ui.competitorGap }),
2567
+ /* @__PURE__ */ jsxs16("p", { className: "pt-rival__line is-gap", children: [
2568
+ /* @__PURE__ */ jsx18("span", { className: "pt-rival__tag", children: ui.competitorGap }),
2480
2569
  t(rival.gap)
2481
2570
  ] })
2482
2571
  ] }, rival.id)) }),
2483
- analysis.market.pricing && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2484
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.pricingTitle }),
2485
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(analysis.market.pricing) })
2572
+ analysis.market.pricing && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2573
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.pricingTitle }),
2574
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(analysis.market.pricing) })
2486
2575
  ] }),
2487
- analysis.market.notes && analysis.market.notes.length > 0 && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2488
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.marketNotesTitle }),
2489
- /* @__PURE__ */ jsx17("ul", { className: "pt-cap__list", children: analysis.market.notes.map((note) => /* @__PURE__ */ jsx17("li", { children: t(note) }, t(note))) })
2576
+ analysis.market.notes && analysis.market.notes.length > 0 && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2577
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.marketNotesTitle }),
2578
+ /* @__PURE__ */ jsx18("ul", { className: "pt-cap__list", children: analysis.market.notes.map((note) => /* @__PURE__ */ jsx18("li", { children: t(note) }, t(note))) })
2490
2579
  ] })
2491
- ] }) : /* @__PURE__ */ jsx17("p", { className: "pt-analysis__empty", children: ui.marketEmpty }) }),
2492
- /* @__PURE__ */ jsx17(Choices, { section, analysis, lang, ui, onDecide }),
2493
- total > 0 && /* @__PURE__ */ jsxs15("section", { className: "pt-analysis__split", children: [
2494
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2495
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.claudeReadsTitle }),
2496
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.claudeReadsIntro }),
2497
- /* @__PURE__ */ jsxs15("ul", { className: "pt-analysis__list", children: [
2498
- answers.map(({ section: from, choice, option }) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal is-primary", children: [
2499
- /* @__PURE__ */ jsxs15("span", { children: [
2500
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2580
+ ] }) : /* @__PURE__ */ jsx18("p", { className: "pt-analysis__empty", children: ui.marketEmpty }) }),
2581
+ /* @__PURE__ */ jsx18(Choices, { section, analysis, lang, ui, onDecide }),
2582
+ total > 0 && /* @__PURE__ */ jsxs16("section", { className: "pt-analysis__split", children: [
2583
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2584
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.claudeReadsTitle }),
2585
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.claudeReadsIntro }),
2586
+ /* @__PURE__ */ jsxs16("ul", { className: "pt-analysis__list", children: [
2587
+ answers.map(({ section: from, choice, option }) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal is-primary", children: [
2588
+ /* @__PURE__ */ jsxs16("span", { children: [
2589
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2501
2590
  t(choice.question)
2502
2591
  ] }),
2503
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: t(option.label) })
2592
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: t(option.label) })
2504
2593
  ] }, choice.id)),
2505
- answers.length === 0 && /* @__PURE__ */ jsx17("li", { className: "pt-analysis__goal is-off", children: ui.choicesNone })
2594
+ answers.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.choicesNone })
2506
2595
  ] })
2507
2596
  ] }),
2508
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2509
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.claudeOpenTitle }),
2510
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.claudeOpenIntro }),
2511
- /* @__PURE__ */ jsxs15("ul", { className: "pt-analysis__list", children: [
2512
- open.map(({ section: from, choice }) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal", children: [
2513
- /* @__PURE__ */ jsxs15("button", { type: "button", className: "pt-analysis__link", onClick: () => setSection(from), children: [
2514
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2597
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2598
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.claudeOpenTitle }),
2599
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.claudeOpenIntro }),
2600
+ /* @__PURE__ */ jsxs16("ul", { className: "pt-analysis__list", children: [
2601
+ open.map(({ section: from, choice }) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal", children: [
2602
+ /* @__PURE__ */ jsxs16("button", { type: "button", className: "pt-analysis__link", onClick: () => setSection(from), children: [
2603
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2515
2604
  t(choice.question)
2516
2605
  ] }),
2517
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: ui.choiceOpen })
2606
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.choiceOpen })
2518
2607
  ] }, choice.id)),
2519
- open.length === 0 && /* @__PURE__ */ jsx17("li", { className: "pt-analysis__goal is-off", children: ui.analysisAllDecided })
2608
+ open.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.analysisAllDecided })
2520
2609
  ] })
2521
2610
  ] })
2522
2611
  ] })
@@ -2567,39 +2656,39 @@ function ageInWords(seconds, lang) {
2567
2656
  }
2568
2657
 
2569
2658
  // src/panel/MarketplaceView.tsx
2570
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2659
+ import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2571
2660
  function ToolRow({
2572
2661
  tool,
2573
2662
  lang,
2574
2663
  ui,
2575
2664
  onInstall
2576
2665
  }) {
2577
- return /* @__PURE__ */ jsxs16("article", { className: `pt-tool${tool.state ? ` is-${tool.state}` : " is-command"}`, children: [
2578
- /* @__PURE__ */ jsxs16("div", { className: "pt-tool__head", children: [
2579
- /* @__PURE__ */ jsx18("h3", { className: "pt-tool__name", children: tool.name }),
2580
- /* @__PURE__ */ jsx18("span", { className: "pt-tool__state", children: tool.state ? ui.installStates[tool.state] : ui.toolCommandOnly })
2666
+ return /* @__PURE__ */ jsxs17("article", { className: `pt-tool${tool.state ? ` is-${tool.state}` : " is-command"}`, children: [
2667
+ /* @__PURE__ */ jsxs17("div", { className: "pt-tool__head", children: [
2668
+ /* @__PURE__ */ jsx19("h3", { className: "pt-tool__name", children: tool.name }),
2669
+ /* @__PURE__ */ jsx19("span", { className: "pt-tool__state", children: tool.state ? ui.installStates[tool.state] : ui.toolCommandOnly })
2581
2670
  ] }),
2582
- tool.summary && /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: tool.summary }),
2583
- /* @__PURE__ */ jsxs16("p", { className: "pt-tool__meta", children: [
2584
- /* @__PURE__ */ jsx18("span", { className: "pt-tool__id", children: tool.id }),
2585
- tool.claudePlugin && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2671
+ tool.summary && /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: tool.summary }),
2672
+ /* @__PURE__ */ jsxs17("p", { className: "pt-tool__meta", children: [
2673
+ /* @__PURE__ */ jsx19("span", { className: "pt-tool__id", children: tool.id }),
2674
+ tool.claudePlugin && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2586
2675
  " \xB7 ",
2587
- tool.version ? /* @__PURE__ */ jsxs16("span", { className: "pt-tool__version", children: [
2676
+ tool.version ? /* @__PURE__ */ jsxs17("span", { className: "pt-tool__version", children: [
2588
2677
  "v",
2589
2678
  tool.version
2590
2679
  ] }) : (
2591
2680
  // Never a version we made up. A blank here is the plugin's own
2592
2681
  // manifest failing to answer, and it says so on hover.
2593
- /* @__PURE__ */ jsx18("span", { className: "pt-tool__version is-unknown", title: tool.versionError ?? void 0, children: ui.versionUnknown })
2682
+ /* @__PURE__ */ jsx19("span", { className: "pt-tool__version is-unknown", title: tool.versionError ?? void 0, children: ui.versionUnknown })
2594
2683
  )
2595
2684
  ] }),
2596
- tool.repo && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2685
+ tool.repo && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2597
2686
  " \xB7 ",
2598
- /* @__PURE__ */ jsx18("a", { className: "pt-tool__repo", href: `https://github.com/${tool.repo}`, target: "_blank", rel: "noreferrer", children: tool.repo })
2687
+ /* @__PURE__ */ jsx19("a", { className: "pt-tool__repo", href: `https://github.com/${tool.repo}`, target: "_blank", rel: "noreferrer", children: tool.repo })
2599
2688
  ] })
2600
2689
  ] }),
2601
- tool.tags.length > 0 && /* @__PURE__ */ jsx18("p", { className: "pt-tool__tags", children: tool.tags.map((tag) => /* @__PURE__ */ jsx18("span", { className: "pt-tool__tag", children: tag }, tag)) }),
2602
- !tool.claudePlugin && tool.standaloneCommand && /* @__PURE__ */ jsx18(
2690
+ tool.tags.length > 0 && /* @__PURE__ */ jsx19("p", { className: "pt-tool__tags", children: tool.tags.map((tag) => /* @__PURE__ */ jsx19("span", { className: "pt-tool__tag", children: tag }, tag)) }),
2691
+ !tool.claudePlugin && tool.standaloneCommand && /* @__PURE__ */ jsx19(
2603
2692
  CopyBlock,
2604
2693
  {
2605
2694
  text: tool.standaloneCommand,
@@ -2607,11 +2696,11 @@ function ToolRow({
2607
2696
  labels: { copy: ui.copy, copied: ui.copied, selected: ui.copySelected }
2608
2697
  }
2609
2698
  ),
2610
- /* @__PURE__ */ jsxs16("div", { className: "pt-panel-row pt-tool__actions", children: [
2611
- /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => onInstall(tool), children: tool.claudePlugin ? ui.install : ui.howToRun }),
2612
- tool.homepage && /* @__PURE__ */ jsx18("a", { className: "pt-btn pt-btn--sm", href: tool.homepage, target: "_blank", rel: "noreferrer", children: ui.learnMore })
2699
+ /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row pt-tool__actions", children: [
2700
+ /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => onInstall(tool), children: tool.claudePlugin ? ui.install : ui.howToRun }),
2701
+ tool.homepage && /* @__PURE__ */ jsx19("a", { className: "pt-btn pt-btn--sm", href: tool.homepage, target: "_blank", rel: "noreferrer", children: ui.learnMore })
2613
2702
  ] }),
2614
- tool.state === "misconfigured" && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.stateMisconfiguredWhy })
2703
+ tool.state === "misconfigured" && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.stateMisconfiguredWhy })
2615
2704
  ] });
2616
2705
  }
2617
2706
  function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
@@ -2633,39 +2722,39 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2633
2722
  }),
2634
2723
  [tools]
2635
2724
  );
2636
- return /* @__PURE__ */ jsxs16("div", { className: "pt-panel-page pt-panel-section pt-marketplace", children: [
2637
- /* @__PURE__ */ jsxs16("section", { children: [
2638
- /* @__PURE__ */ jsx18("p", { className: "pt-eyebrow", children: report?.marketplace.name ?? ui.marketplaceEyebrow }),
2639
- /* @__PURE__ */ jsx18("h2", { className: "pt-h2", children: ui.marketplaceTitle }),
2640
- /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.marketplaceIntro }),
2641
- /* @__PURE__ */ jsxs16("div", { className: "pt-panel-row pt-marketplace__status", children: [
2642
- onRefresh && /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onRefresh, disabled: loading, children: loading ? ui.refreshing : ui.refresh }),
2643
- report && onRefresh && /* @__PURE__ */ jsx18("span", { className: "pt-marketplace__age", children: ui.readAt(ageInWords(report.ageSeconds, lang)) })
2725
+ return /* @__PURE__ */ jsxs17("div", { className: "pt-panel-page pt-panel-section pt-marketplace", children: [
2726
+ /* @__PURE__ */ jsxs17("section", { children: [
2727
+ /* @__PURE__ */ jsx19("p", { className: "pt-eyebrow", children: report?.marketplace.name ?? ui.marketplaceEyebrow }),
2728
+ /* @__PURE__ */ jsx19("h2", { className: "pt-h2", children: ui.marketplaceTitle }),
2729
+ /* @__PURE__ */ jsx19("p", { className: "pt-sub", children: ui.marketplaceIntro }),
2730
+ /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row pt-marketplace__status", children: [
2731
+ onRefresh && /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onRefresh, disabled: loading, children: loading ? ui.refreshing : ui.refresh }),
2732
+ report && onRefresh && /* @__PURE__ */ jsx19("span", { className: "pt-marketplace__age", children: ui.readAt(ageInWords(report.ageSeconds, lang)) })
2644
2733
  ] }),
2645
- report?.stale && !report.unavailable && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.catalogueStale(ageInWords(report.ageSeconds, lang)) }),
2646
- report?.unavailable && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.catalogueUnavailable }),
2647
- failure && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.catalogueFailed })
2734
+ report?.stale && !report.unavailable && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.catalogueStale(ageInWords(report.ageSeconds, lang)) }),
2735
+ report?.unavailable && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.catalogueUnavailable }),
2736
+ failure && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.catalogueFailed })
2648
2737
  ] }),
2649
- report && /* @__PURE__ */ jsxs16("section", { children: [
2650
- /* @__PURE__ */ jsxs16("p", { className: "pt-marketplace__project", children: [
2738
+ report && /* @__PURE__ */ jsxs17("section", { children: [
2739
+ /* @__PURE__ */ jsxs17("p", { className: "pt-marketplace__project", children: [
2651
2740
  ui.stateFrom(report.project.repo, SETTINGS_PATH),
2652
- report.project.settingsStatus === "absent" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2741
+ report.project.settingsStatus === "absent" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2653
2742
  " \xB7 ",
2654
2743
  ui.settingsAbsent
2655
2744
  ] }),
2656
- report.project.settingsStatus === "unreadable" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2745
+ report.project.settingsStatus === "unreadable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2657
2746
  " \xB7 ",
2658
2747
  ui.settingsUnreadable
2659
2748
  ] }),
2660
- report.project.settingsStatus === "unparseable" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2749
+ report.project.settingsStatus === "unparseable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2661
2750
  " \xB7 ",
2662
2751
  ui.settingsUnparseable
2663
2752
  ] })
2664
2753
  ] }),
2665
- report.project.detail && /* @__PURE__ */ jsx18("p", { className: "pt-marketplace__detail", children: report.project.detail }),
2666
- /* @__PURE__ */ jsxs16("div", { className: "pt-panel-row pt-marketplace__filters", children: [
2667
- /* @__PURE__ */ jsx18(FilterChip, { label: ui.all, count: counts.all, active: filter === "all", onClick: () => setFilter("all") }),
2668
- /* @__PURE__ */ jsx18(
2754
+ report.project.detail && /* @__PURE__ */ jsx19("p", { className: "pt-marketplace__detail", children: report.project.detail }),
2755
+ /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row pt-marketplace__filters", children: [
2756
+ /* @__PURE__ */ jsx19(FilterChip, { label: ui.all, count: counts.all, active: filter === "all", onClick: () => setFilter("all") }),
2757
+ /* @__PURE__ */ jsx19(
2669
2758
  FilterChip,
2670
2759
  {
2671
2760
  label: ui.filterPlugins,
@@ -2674,7 +2763,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2674
2763
  onClick: () => setFilter("plugins")
2675
2764
  }
2676
2765
  ),
2677
- /* @__PURE__ */ jsx18(
2766
+ /* @__PURE__ */ jsx19(
2678
2767
  FilterChip,
2679
2768
  {
2680
2769
  label: ui.filterActive,
@@ -2683,7 +2772,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2683
2772
  onClick: () => setFilter("active")
2684
2773
  }
2685
2774
  ),
2686
- /* @__PURE__ */ jsx18(
2775
+ /* @__PURE__ */ jsx19(
2687
2776
  FilterChip,
2688
2777
  {
2689
2778
  label: ui.filterStandalone,
@@ -2693,12 +2782,12 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2693
2782
  }
2694
2783
  )
2695
2784
  ] }),
2696
- loading && tools.length === 0 ? /* @__PURE__ */ jsx18("p", { className: "pt-analysis__empty", children: ui.catalogueLoading }) : shown.length === 0 ? /* @__PURE__ */ jsx18("p", { className: "pt-analysis__empty", children: ui.catalogueEmpty }) : /* @__PURE__ */ jsx18("div", { className: "pt-tool-grid", children: shown.map((tool) => /* @__PURE__ */ jsx18(ToolRow, { tool, lang, ui, onInstall: setOpen }, tool.id)) })
2785
+ loading && tools.length === 0 ? /* @__PURE__ */ jsx19("p", { className: "pt-analysis__empty", children: ui.catalogueLoading }) : shown.length === 0 ? /* @__PURE__ */ jsx19("p", { className: "pt-analysis__empty", children: ui.catalogueEmpty }) : /* @__PURE__ */ jsx19("div", { className: "pt-tool-grid", children: shown.map((tool) => /* @__PURE__ */ jsx19(ToolRow, { tool, lang, ui, onInstall: setOpen }, tool.id)) })
2697
2786
  ] }),
2698
- open && /* @__PURE__ */ jsxs16(DetailSheet, { open: true, onClose: () => setOpen(null), ariaLabel: `${ui.installTitle} \u2014 ${open.name}`, children: [
2699
- /* @__PURE__ */ jsx18("p", { className: "pt-eyebrow", children: ui.installTitle }),
2700
- /* @__PURE__ */ jsx18("h2", { className: "pt-h2", children: open.name }),
2701
- /* @__PURE__ */ jsx18(
2787
+ open && /* @__PURE__ */ jsxs17(DetailSheet, { open: true, onClose: () => setOpen(null), ariaLabel: `${ui.installTitle} \u2014 ${open.name}`, children: [
2788
+ /* @__PURE__ */ jsx19("p", { className: "pt-eyebrow", children: ui.installTitle }),
2789
+ /* @__PURE__ */ jsx19("h2", { className: "pt-h2", children: open.name }),
2790
+ /* @__PURE__ */ jsx19(
2702
2791
  InstallSheet,
2703
2792
  {
2704
2793
  tool: open,
@@ -2707,7 +2796,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2707
2796
  registered: report?.project.marketplaceRegistered ?? false
2708
2797
  }
2709
2798
  ),
2710
- /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => setOpen(null), children: ui.close })
2799
+ /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => setOpen(null), children: ui.close })
2711
2800
  ] })
2712
2801
  ] });
2713
2802
  }
@@ -2718,9 +2807,9 @@ function InstallSheet({
2718
2807
  registered
2719
2808
  }) {
2720
2809
  const copy = { copy: ui.copy, copied: ui.copied, selected: ui.copySelected };
2721
- return /* @__PURE__ */ jsxs16(Fragment4, { children: [
2722
- tool.claudePlugin ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
2723
- /* @__PURE__ */ jsx18(DetailSection, { title: ui.installRepoTitle, subtitle: ui.installRepoHint, children: /* @__PURE__ */ jsx18(
2810
+ return /* @__PURE__ */ jsxs17(Fragment5, { children: [
2811
+ tool.claudePlugin ? /* @__PURE__ */ jsxs17(Fragment5, { children: [
2812
+ /* @__PURE__ */ jsx19(DetailSection, { title: ui.installRepoTitle, subtitle: ui.installRepoHint, children: /* @__PURE__ */ jsx19(
2724
2813
  CopyBlock,
2725
2814
  {
2726
2815
  text: repositorySnippet(tool.id, marketplace),
@@ -2729,16 +2818,16 @@ function InstallSheet({
2729
2818
  labels: copy
2730
2819
  }
2731
2820
  ) }),
2732
- /* @__PURE__ */ jsx18(DetailSection, { title: ui.installCliTitle, subtitle: ui.installCliHint, children: /* @__PURE__ */ jsx18(CopyBlock, { text: commandSnippet(tool.id, marketplace), labels: copy }) })
2733
- ] }) : /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: ui.installNoPlugin }),
2734
- tool.standaloneCommand ? /* @__PURE__ */ jsx18(DetailSection, { title: ui.installStandaloneTitle, subtitle: ui.installStandaloneHint, children: /* @__PURE__ */ jsx18(CopyBlock, { text: tool.standaloneCommand, labels: copy }) }) : /* @__PURE__ */ jsx18(DetailSection, { title: ui.installStandaloneTitle, children: /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: ui.installNoStandalone }) }),
2735
- /* @__PURE__ */ jsx18("p", { className: "pt-marketplace__source", children: ui.marketplaceSource(marketplace.url) })
2821
+ /* @__PURE__ */ jsx19(DetailSection, { title: ui.installCliTitle, subtitle: ui.installCliHint, children: /* @__PURE__ */ jsx19(CopyBlock, { text: commandSnippet(tool.id, marketplace), labels: copy }) })
2822
+ ] }) : /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: ui.installNoPlugin }),
2823
+ tool.standaloneCommand ? /* @__PURE__ */ jsx19(DetailSection, { title: ui.installStandaloneTitle, subtitle: ui.installStandaloneHint, children: /* @__PURE__ */ jsx19(CopyBlock, { text: tool.standaloneCommand, labels: copy }) }) : /* @__PURE__ */ jsx19(DetailSection, { title: ui.installStandaloneTitle, children: /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: ui.installNoStandalone }) }),
2824
+ /* @__PURE__ */ jsx19("p", { className: "pt-marketplace__source", children: ui.marketplaceSource(marketplace.url) })
2736
2825
  ] });
2737
2826
  }
2738
2827
 
2739
2828
  // src/panel/CardSheet.tsx
2740
2829
  import { useState as useState9 } from "react";
2741
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2830
+ import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
2742
2831
  var LEVEL_LABEL = (ui) => ({
2743
2832
  high: ui.levelHigh,
2744
2833
  medium: ui.levelMedium,
@@ -2765,9 +2854,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2765
2854
  });
2766
2855
  setNote("");
2767
2856
  }
2768
- return /* @__PURE__ */ jsxs17(DetailSheet, { open: true, onClose, ariaLabel: ui.cardDetail, children: [
2769
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.title, children: [
2770
- /* @__PURE__ */ jsx19(
2857
+ return /* @__PURE__ */ jsxs18(DetailSheet, { open: true, onClose, ariaLabel: ui.cardDetail, children: [
2858
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.title, children: [
2859
+ /* @__PURE__ */ jsx20(
2771
2860
  "input",
2772
2861
  {
2773
2862
  className: "pt-input",
@@ -2776,9 +2865,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2776
2865
  onChange: (event) => patch({ title: writeText(lang, event.target.value) })
2777
2866
  }
2778
2867
  ),
2779
- untranslated(card.title) && /* @__PURE__ */ jsx19("span", { className: "pt-flag", children: ui.untranslatedBadge })
2868
+ untranslated(card.title) && /* @__PURE__ */ jsx20("span", { className: "pt-flag", children: ui.untranslatedBadge })
2780
2869
  ] }),
2781
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.detail, children: /* @__PURE__ */ jsx19(
2870
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.detail, children: /* @__PURE__ */ jsx20(
2782
2871
  "textarea",
2783
2872
  {
2784
2873
  className: "pt-textarea",
@@ -2788,7 +2877,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2788
2877
  onChange: (event) => patch({ body: writeText(lang, event.target.value) })
2789
2878
  }
2790
2879
  ) }),
2791
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.areaLabel, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: state.areas.map((area) => /* @__PURE__ */ jsx19(
2880
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.areaLabel, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: state.areas.map((area) => /* @__PURE__ */ jsx20(
2792
2881
  FilterChip,
2793
2882
  {
2794
2883
  label: text(area.label, lang),
@@ -2797,7 +2886,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2797
2886
  },
2798
2887
  area.id
2799
2888
  )) }) }),
2800
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.priority, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx19(
2889
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.priority, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx20(
2801
2890
  FilterChip,
2802
2891
  {
2803
2892
  label: levelLabel[level],
@@ -2806,7 +2895,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2806
2895
  },
2807
2896
  level
2808
2897
  )) }) }),
2809
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.risk, subtitle: ui.riskHint, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx19(
2898
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.risk, subtitle: ui.riskHint, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx20(
2810
2899
  FilterChip,
2811
2900
  {
2812
2901
  label: levelLabel[level],
@@ -2815,7 +2904,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2815
2904
  },
2816
2905
  level
2817
2906
  )) }) }),
2818
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.dependsOn, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: OWNERS.map((owner) => /* @__PURE__ */ jsx19(
2907
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.dependsOn, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: OWNERS.map((owner) => /* @__PURE__ */ jsx20(
2819
2908
  FilterChip,
2820
2909
  {
2821
2910
  label: ownerLabel[owner],
@@ -2824,14 +2913,14 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2824
2913
  },
2825
2914
  owner
2826
2915
  )) }) }),
2827
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.orderTitle, children: /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row", children: [
2828
- /* @__PURE__ */ jsx19(FilterChip, { label: `\u26A1 ${ui.orderOn}`, active: card.order, onClick: () => patch({ order: true }) }),
2829
- /* @__PURE__ */ jsx19(FilterChip, { label: ui.orderOff, active: !card.order, onClick: () => patch({ order: false }) })
2916
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.orderTitle, children: /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", children: [
2917
+ /* @__PURE__ */ jsx20(FilterChip, { label: `\u26A1 ${ui.orderOn}`, active: card.order, onClick: () => patch({ order: true }) }),
2918
+ /* @__PURE__ */ jsx20(FilterChip, { label: ui.orderOff, active: !card.order, onClick: () => patch({ order: false }) })
2830
2919
  ] }) }),
2831
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.intentTitle, subtitle: ui.intentHint, children: [
2832
- /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row", children: [
2833
- /* @__PURE__ */ jsx19(FilterChip, { label: ui.intentNone, active: card.intent === null, onClick: () => patch({ intent: null }) }),
2834
- INTENTS.map((intent) => /* @__PURE__ */ jsx19(
2920
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.intentTitle, subtitle: ui.intentHint, children: [
2921
+ /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", children: [
2922
+ /* @__PURE__ */ jsx20(FilterChip, { label: ui.intentNone, active: card.intent === null, onClick: () => patch({ intent: null }) }),
2923
+ INTENTS.map((intent) => /* @__PURE__ */ jsx20(
2835
2924
  FilterChip,
2836
2925
  {
2837
2926
  label: INTENT_COPY[intent].label[lang],
@@ -2841,12 +2930,12 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2841
2930
  intent
2842
2931
  ))
2843
2932
  ] }),
2844
- card.intent && /* @__PURE__ */ jsx19("p", { className: "pt-panel-text pt-meaning", children: INTENT_COPY[card.intent].meaning[lang] })
2933
+ card.intent && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text pt-meaning", children: INTENT_COPY[card.intent].meaning[lang] })
2845
2934
  ] }),
2846
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.checklist, children: [
2847
- card.checks.length > 0 && /* @__PURE__ */ jsx19("ul", { className: "pt-checks", children: card.checks.map((check) => /* @__PURE__ */ jsxs17("li", { children: [
2848
- /* @__PURE__ */ jsxs17("label", { children: [
2849
- /* @__PURE__ */ jsx19(
2935
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.checklist, children: [
2936
+ card.checks.length > 0 && /* @__PURE__ */ jsx20("ul", { className: "pt-checks", children: card.checks.map((check) => /* @__PURE__ */ jsxs18("li", { children: [
2937
+ /* @__PURE__ */ jsxs18("label", { children: [
2938
+ /* @__PURE__ */ jsx20(
2850
2939
  "input",
2851
2940
  {
2852
2941
  type: "checkbox",
@@ -2858,9 +2947,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2858
2947
  })
2859
2948
  }
2860
2949
  ),
2861
- /* @__PURE__ */ jsx19("span", { className: check.done ? "is-done" : void 0, children: text(check.text, lang) })
2950
+ /* @__PURE__ */ jsx20("span", { className: check.done ? "is-done" : void 0, children: text(check.text, lang) })
2862
2951
  ] }),
2863
- /* @__PURE__ */ jsx19(
2952
+ /* @__PURE__ */ jsx20(
2864
2953
  "button",
2865
2954
  {
2866
2955
  type: "button",
@@ -2871,8 +2960,8 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2871
2960
  }
2872
2961
  )
2873
2962
  ] }, check.id)) }),
2874
- /* @__PURE__ */ jsxs17("div", { className: "pt-compose", children: [
2875
- /* @__PURE__ */ jsx19(
2963
+ /* @__PURE__ */ jsxs18("div", { className: "pt-compose", children: [
2964
+ /* @__PURE__ */ jsx20(
2876
2965
  "input",
2877
2966
  {
2878
2967
  className: "pt-input",
@@ -2887,19 +2976,19 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2887
2976
  }
2888
2977
  }
2889
2978
  ),
2890
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addStep, children: ui.addStep })
2979
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addStep, children: ui.addStep })
2891
2980
  ] })
2892
2981
  ] }),
2893
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.notes, children: [
2894
- card.notes.map((entry) => /* @__PURE__ */ jsxs17("div", { className: "pt-note", children: [
2895
- /* @__PURE__ */ jsxs17("p", { className: "pt-note__meta", children: [
2982
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.notes, children: [
2983
+ card.notes.map((entry) => /* @__PURE__ */ jsxs18("div", { className: "pt-note", children: [
2984
+ /* @__PURE__ */ jsxs18("p", { className: "pt-note__meta", children: [
2896
2985
  entry.by === "claude" ? "Claude" : ui.ownerYou,
2897
2986
  " \xB7 ",
2898
2987
  entry.date
2899
2988
  ] }),
2900
- /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: text(entry.text, lang) })
2989
+ /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: text(entry.text, lang) })
2901
2990
  ] }, entry.id)),
2902
- /* @__PURE__ */ jsx19(
2991
+ /* @__PURE__ */ jsx20(
2903
2992
  "textarea",
2904
2993
  {
2905
2994
  className: "pt-textarea",
@@ -2909,10 +2998,10 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2909
2998
  onChange: (event) => setNote(event.target.value)
2910
2999
  }
2911
3000
  ),
2912
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addNote, children: ui.leaveNote })
3001
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addNote, children: ui.leaveNote })
2913
3002
  ] }),
2914
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.columnTitle, children: [
2915
- /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: state.columns.map((column) => /* @__PURE__ */ jsx19(
3003
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.columnTitle, children: [
3004
+ /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: state.columns.map((column) => /* @__PURE__ */ jsx20(
2916
3005
  FilterChip,
2917
3006
  {
2918
3007
  label: text(column.title, lang),
@@ -2923,16 +3012,16 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2923
3012
  },
2924
3013
  column.id
2925
3014
  )) }),
2926
- (card.startedAt || card.completedAt) && /* @__PURE__ */ jsxs17("p", { className: "pt-panel-text pt-stamps", children: [
3015
+ (card.startedAt || card.completedAt) && /* @__PURE__ */ jsxs18("p", { className: "pt-panel-text pt-stamps", children: [
2927
3016
  card.startedAt && `${ui.started}: ${card.startedAt}`,
2928
3017
  card.startedAt && card.completedAt && " \xB7 ",
2929
3018
  card.completedAt && `${ui.completed}: ${card.completedAt}`
2930
3019
  ] }),
2931
- claimedWithoutStarting(card) && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.neverStarted })
3020
+ claimedWithoutStarting(card) && /* @__PURE__ */ jsx20("p", { className: "pt-warn", children: ui.neverStarted })
2932
3021
  ] }),
2933
- /* @__PURE__ */ jsxs17("div", { className: "pt-sheet-actions", children: [
2934
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onClose, children: ui.close }),
2935
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm pt-danger", onClick: () => onDelete(card.id), children: ui.deleteCard })
3022
+ /* @__PURE__ */ jsxs18("div", { className: "pt-sheet-actions", children: [
3023
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onClose, children: ui.close }),
3024
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-danger", onClick: () => onDelete(card.id), children: ui.deleteCard })
2936
3025
  ] })
2937
3026
  ] });
2938
3027
  }
@@ -2965,7 +3054,7 @@ function resolveTheme(saved, stored, themes, hasImported, fallback) {
2965
3054
  }
2966
3055
 
2967
3056
  // src/panel/PanelApp.tsx
2968
- import { Fragment as Fragment5, jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
3057
+ import { Fragment as Fragment6, jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
2969
3058
  var IMPORTED = "imported";
2970
3059
  var WIZARD_KEY = "paneltir:setup-done";
2971
3060
  var THEME_KEY = "paneltir:theme";
@@ -3051,7 +3140,6 @@ function PanelApp({
3051
3140
  );
3052
3141
  const [state, setState] = useState10(initialState);
3053
3142
  const [filter, setFilter] = useState10("all");
3054
- const [showArchived, setShowArchived] = useState10(() => /* @__PURE__ */ new Set());
3055
3143
  const [openCardId, setOpenCardId] = useState10(null);
3056
3144
  const [settingsOpen, setSettingsOpen] = useState10(false);
3057
3145
  const [update, setUpdate] = useState10(null);
@@ -3095,11 +3183,11 @@ function PanelApp({
3095
3183
  status: state_("GH_TOKEN"),
3096
3184
  variable: "GH_TOKEN",
3097
3185
  enables: ui.needTokenEnables,
3098
- fix: /* @__PURE__ */ jsxs18("ol", { children: [
3099
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenCreate }),
3100
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenScope }),
3101
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenPaste }),
3102
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenRedeploy })
3186
+ fix: /* @__PURE__ */ jsxs19("ol", { children: [
3187
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenCreate }),
3188
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenScope }),
3189
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenPaste }),
3190
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenRedeploy })
3103
3191
  ] })
3104
3192
  },
3105
3193
  {
@@ -3108,7 +3196,7 @@ function PanelApp({
3108
3196
  status: state_("PANEL_REPO"),
3109
3197
  variable: "PANEL_REPO",
3110
3198
  enables: ui.needRepoEnables,
3111
- fix: /* @__PURE__ */ jsx20("p", { children: ui.fixRepo })
3199
+ fix: /* @__PURE__ */ jsx21("p", { children: ui.fixRepo })
3112
3200
  },
3113
3201
  // The gate is the only requirement here that is not an environment
3114
3202
  // variable: it is files this project owns, and the only one whose
@@ -3135,12 +3223,12 @@ function PanelApp({
3135
3223
  label: ui.needGate,
3136
3224
  status: gateReading.verdict === "current" ? "ok" : gateReading.verdict === "behind" ? "missing" : "unknown",
3137
3225
  enables: ui.needGateEnables,
3138
- fix: /* @__PURE__ */ jsxs18(Fragment5, { children: [
3139
- /* @__PURE__ */ jsxs18("p", { children: [
3226
+ fix: /* @__PURE__ */ jsxs19(Fragment6, { children: [
3227
+ /* @__PURE__ */ jsxs19("p", { children: [
3140
3228
  ui.fixGate,
3141
3229
  gateReading.copiedFrom ? ` (v${gateReading.copiedFrom} \u2192 v${gateReading.installed})` : ""
3142
3230
  ] }),
3143
- /* @__PURE__ */ jsx20("pre", { className: "pt-copy__pre", children: "npx paneltir doctor" })
3231
+ /* @__PURE__ */ jsx21("pre", { className: "pt-copy__pre", children: "npx paneltir doctor" })
3144
3232
  ] })
3145
3233
  }]
3146
3234
  ];
@@ -3174,32 +3262,24 @@ function PanelApp({
3174
3262
  [filter]
3175
3263
  );
3176
3264
  const visibleCards = useMemo5(() => state.cards.filter(matches), [state.cards, matches]);
3265
+ const archivedCards = useMemo5(
3266
+ () => state.cards.filter((card) => isArchived(card, doneColumns)),
3267
+ [state.cards, doneColumns]
3268
+ );
3269
+ const archivedIds = useMemo5(() => new Set(archivedCards.map((card) => card.id)), [archivedCards]);
3270
+ const hasRecord = Boolean(showHistory) || archivedCards.length > 0;
3271
+ const openChoices = useMemo5(
3272
+ () => state.analysis ? undecided(state.analysis).length : 0,
3273
+ [state.analysis]
3274
+ );
3177
3275
  const boardColumns = useMemo5(
3178
- () => state.columns.map((column) => {
3179
- const mine = visibleCards.filter((card) => card.column === column.id);
3180
- const archived = mine.filter((card) => isArchived(card, doneColumns));
3181
- const showing = showArchived.has(column.id) ? mine : mine.filter((card) => !archived.includes(card));
3182
- return {
3183
- id: column.id,
3184
- title: t(column.title),
3185
- hint: column.hint ? t(column.hint) : void 0,
3186
- cards: showing,
3187
- footer: archived.length ? /* @__PURE__ */ jsx20(
3188
- "button",
3189
- {
3190
- type: "button",
3191
- onClick: () => setShowArchived((current) => {
3192
- const next = new Set(current);
3193
- if (next.has(column.id)) next.delete(column.id);
3194
- else next.add(column.id);
3195
- return next;
3196
- }),
3197
- children: showArchived.has(column.id) ? ui.archivedHide : `${archived.length} ${archived.length === 1 ? ui.archivedOne : ui.archivedMany}`
3198
- }
3199
- ) : void 0
3200
- };
3201
- }),
3202
- [state.columns, visibleCards, doneColumns, showArchived, t, ui]
3276
+ () => state.columns.map((column) => ({
3277
+ id: column.id,
3278
+ title: t(column.title),
3279
+ hint: column.hint ? t(column.hint) : void 0,
3280
+ cards: visibleCards.filter((card) => card.column === column.id && !archivedIds.has(card.id))
3281
+ })),
3282
+ [state.columns, visibleCards, archivedIds, t]
3203
3283
  );
3204
3284
  const notifications = useMemo5(() => {
3205
3285
  const items = [];
@@ -3297,18 +3377,18 @@ function PanelApp({
3297
3377
  }, []);
3298
3378
  const addCard = useCallback5(
3299
3379
  (columnId) => {
3300
- const card = emptyCard(columnId, state.areas[0]?.id ?? "general");
3380
+ const card = stampForColumn(emptyCard(columnId, state.areas[0]?.id ?? "general"), state.columns);
3301
3381
  setState((current) => ({ ...current, updatedAt: today(), cards: [...current.cards, card] }));
3302
3382
  setOpenCardId(card.id);
3303
3383
  },
3304
- [state.areas]
3384
+ [state.areas, state.columns]
3305
3385
  );
3306
3386
  const addUpdateCard = useCallback5(() => {
3307
3387
  if (!update?.behind) return;
3308
3388
  const id = updateCardId(update.latest);
3309
3389
  if (state.cards.some((card2) => card2.id === id)) return;
3310
3390
  const card = {
3311
- ...emptyCard("next", state.areas[0]?.id ?? "general"),
3391
+ ...emptyCard(queueColumn(state.columns), state.areas[0]?.id ?? "general"),
3312
3392
  id,
3313
3393
  title: { en: UI.en.updateCardTitle(update.latest), es: UI.es.updateCardTitle(update.latest) },
3314
3394
  body: { en: UI.en.updateCardBody(update.latest), es: UI.es.updateCardBody(update.latest) },
@@ -3319,7 +3399,7 @@ function PanelApp({
3319
3399
  };
3320
3400
  setState((current) => ({ ...current, updatedAt: today(), cards: [...current.cards, card] }));
3321
3401
  setOpenCardId(id);
3322
- }, [update, state.cards, state.areas, state.preferences?.updateAsOrder]);
3402
+ }, [update, state.cards, state.areas, state.columns, state.preferences?.updateAsOrder]);
3323
3403
  const requestReport = useCallback5(
3324
3404
  (section) => {
3325
3405
  const id = `report-${section}-${today()}`;
@@ -3328,7 +3408,7 @@ function PanelApp({
3328
3408
  return;
3329
3409
  }
3330
3410
  const card = {
3331
- ...emptyCard("next", state.areas[0]?.id ?? "general"),
3411
+ ...emptyCard(queueColumn(state.columns), state.areas[0]?.id ?? "general"),
3332
3412
  id,
3333
3413
  title: { en: UI.en.analysisRedoTitle[section], es: UI.es.analysisRedoTitle[section] },
3334
3414
  body: { en: UI.en.analysisRedoBody[section], es: UI.es.analysisRedoBody[section] },
@@ -3341,12 +3421,14 @@ function PanelApp({
3341
3421
  setState((current) => ({ ...current, updatedAt: today(), cards: [...current.cards, card] }));
3342
3422
  setOpenCardId(id);
3343
3423
  },
3344
- [state.cards, state.areas]
3424
+ [state.cards, state.areas, state.columns]
3345
3425
  );
3346
3426
  const moveCard = useCallback5(
3347
3427
  (move) => {
3348
3428
  setState((current) => {
3349
- const moved = applyMove(current.cards, move, current.cards.filter(matches));
3429
+ const done = new Set(current.columns.filter((column) => column.done).map((column) => column.id));
3430
+ const drawn = current.cards.filter((card) => matches(card) && !isArchived(card, done));
3431
+ const moved = applyMove(current.cards, move, drawn);
3350
3432
  return {
3351
3433
  ...current,
3352
3434
  updatedAt: today(),
@@ -3534,7 +3616,7 @@ function PanelApp({
3534
3616
  throw Object.assign(new Error(saveError(response.status, data, body)), { conflict });
3535
3617
  }
3536
3618
  setSavedSnapshot(JSON.stringify(next));
3537
- setState(next);
3619
+ setState((current) => current === state ? next : current);
3538
3620
  setSave({
3539
3621
  status: "saved",
3540
3622
  at: (/* @__PURE__ */ new Date()).toLocaleTimeString(lang === "es" ? "es-ES" : "en-GB", {
@@ -3569,21 +3651,21 @@ function PanelApp({
3569
3651
  state.updatedAt,
3570
3652
  save.status === "saved" ? ui.savedAt(save.at) : dirty ? ui.unsaved : ""
3571
3653
  ].filter(Boolean).join(" \xB7 ");
3572
- return /* @__PURE__ */ jsxs18(DashboardThemeProvider, { tokens: theme, form, className, children: [
3654
+ return /* @__PURE__ */ jsxs19(DashboardThemeProvider, { tokens: theme, form, className, children: [
3573
3655
  typeof decoration === "function" ? decoration(themeName) : decoration,
3574
- /* @__PURE__ */ jsx20(
3656
+ /* @__PURE__ */ jsx21(
3575
3657
  DashboardHeader,
3576
3658
  {
3577
3659
  wordmark: (
3578
3660
  /* A board belongs to a project, so its name is what goes here. A
3579
3661
  caller with a mark of its own passes `brand`; drawing one here
3580
3662
  would be the kit deciding what somebody else's panel is called. */
3581
- brand ?? /* @__PURE__ */ jsx20("span", { className: "pt-panel-brand", children: state.project })
3663
+ brand ?? /* @__PURE__ */ jsx21("span", { className: "pt-panel-brand", children: state.project })
3582
3664
  ),
3583
3665
  status,
3584
- controls: /* @__PURE__ */ jsxs18(Fragment5, { children: [
3585
- (initialState.analysis || hasMarketplace || showHistory) && /* @__PURE__ */ jsxs18("span", { className: "pt-views", children: [
3586
- /* @__PURE__ */ jsx20(
3666
+ controls: /* @__PURE__ */ jsxs19(Fragment6, { children: [
3667
+ (initialState.analysis || hasMarketplace || hasRecord) && /* @__PURE__ */ jsxs19("span", { className: "pt-views", children: [
3668
+ /* @__PURE__ */ jsx21(
3587
3669
  "button",
3588
3670
  {
3589
3671
  type: "button",
@@ -3593,7 +3675,7 @@ function PanelApp({
3593
3675
  children: ui.board
3594
3676
  }
3595
3677
  ),
3596
- initialState.analysis && /* @__PURE__ */ jsx20(
3678
+ initialState.analysis && /* @__PURE__ */ jsx21(
3597
3679
  "button",
3598
3680
  {
3599
3681
  type: "button",
@@ -3603,7 +3685,7 @@ function PanelApp({
3603
3685
  children: ui.analysis
3604
3686
  }
3605
3687
  ),
3606
- hasMarketplace && /* @__PURE__ */ jsx20(
3688
+ hasMarketplace && /* @__PURE__ */ jsx21(
3607
3689
  "button",
3608
3690
  {
3609
3691
  type: "button",
@@ -3613,18 +3695,18 @@ function PanelApp({
3613
3695
  children: ui.marketplace
3614
3696
  }
3615
3697
  ),
3616
- showHistory && /* @__PURE__ */ jsx20(
3698
+ hasRecord && /* @__PURE__ */ jsx21(
3617
3699
  "button",
3618
3700
  {
3619
3701
  type: "button",
3620
3702
  className: `pt-lang${view === "history" ? " is-on" : ""}`,
3621
3703
  "aria-pressed": view === "history",
3622
3704
  onClick: () => setView("history"),
3623
- children: ui.history
3705
+ children: showHistory ? ui.history : ui.archiveTitle
3624
3706
  }
3625
3707
  )
3626
3708
  ] }),
3627
- showLanguage && LANGS.map((code) => /* @__PURE__ */ jsx20(
3709
+ showLanguage && LANGS.map((code) => /* @__PURE__ */ jsx21(
3628
3710
  "button",
3629
3711
  {
3630
3712
  type: "button",
@@ -3635,7 +3717,7 @@ function PanelApp({
3635
3717
  },
3636
3718
  code
3637
3719
  )),
3638
- /* @__PURE__ */ jsx20(
3720
+ /* @__PURE__ */ jsx21(
3639
3721
  NotificationBell,
3640
3722
  {
3641
3723
  notifications,
@@ -3649,8 +3731,8 @@ function PanelApp({
3649
3731
  }
3650
3732
  }
3651
3733
  ),
3652
- saveEndpoint && /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-lang", onClick: () => setHelpOpen(true), children: ui.help }),
3653
- saveEndpoint && (dirty || save.status === "saving") && /* @__PURE__ */ jsx20(
3734
+ saveEndpoint && /* @__PURE__ */ jsx21("button", { type: "button", className: "pt-lang", onClick: () => setHelpOpen(true), children: ui.help }),
3735
+ saveEndpoint && (dirty || save.status === "saving") && /* @__PURE__ */ jsx21(
3654
3736
  "button",
3655
3737
  {
3656
3738
  type: "button",
@@ -3665,7 +3747,7 @@ function PanelApp({
3665
3747
  onLinkClick: () => setSettingsOpen(true)
3666
3748
  }
3667
3749
  ),
3668
- state.notice && /* @__PURE__ */ jsx20(
3750
+ state.notice && /* @__PURE__ */ jsx21(
3669
3751
  AlertBanner,
3670
3752
  {
3671
3753
  visible: noticeVisible,
@@ -3674,8 +3756,8 @@ function PanelApp({
3674
3756
  onAction: () => setNoticeVisible(false)
3675
3757
  }
3676
3758
  ),
3677
- save.status === "error" && /* @__PURE__ */ jsx20(AlertBanner, { visible: true, message: `${ui.saveFailed}: ${save.message}` }),
3678
- saveEndpoint && setup && !setup.ready && !setup.unknown && !wizardOpen && /* @__PURE__ */ jsx20(
3759
+ save.status === "error" && /* @__PURE__ */ jsx21(AlertBanner, { visible: true, message: `${ui.saveFailed}: ${save.message}` }),
3760
+ saveEndpoint && setup && !setup.ready && !setup.unknown && !wizardOpen && /* @__PURE__ */ jsx21(
3679
3761
  AlertBanner,
3680
3762
  {
3681
3763
  visible: true,
@@ -3684,7 +3766,7 @@ function PanelApp({
3684
3766
  onAction: () => setWizardOpen(true)
3685
3767
  }
3686
3768
  ),
3687
- view === "board" && !saveEndpoint && /* @__PURE__ */ jsx20(
3769
+ view === "board" && !saveEndpoint && /* @__PURE__ */ jsx21(
3688
3770
  GuideTour,
3689
3771
  {
3690
3772
  dismissed: state.preferences?.guideDismissed,
@@ -3693,32 +3775,32 @@ function PanelApp({
3693
3775
  {
3694
3776
  id: "demo-welcome",
3695
3777
  title: ui.demoTourWelcomeTitle,
3696
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourWelcomeBody }),
3778
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourWelcomeBody }),
3697
3779
  dismissLabel: ui.gotIt
3698
3780
  },
3699
3781
  {
3700
3782
  id: "demo-board",
3701
3783
  title: ui.demoTourBoardTitle,
3702
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourBoardBody }),
3784
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourBoardBody }),
3703
3785
  dismissLabel: ui.gotIt
3704
3786
  },
3705
3787
  {
3706
3788
  id: "demo-theme",
3707
3789
  title: ui.demoTourThemeTitle,
3708
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourThemeBody }),
3790
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourThemeBody }),
3709
3791
  dismissLabel: ui.gotIt,
3710
3792
  action: { label: ui.settings, onClick: () => setSettingsOpen(true) }
3711
3793
  },
3712
3794
  {
3713
3795
  id: "demo-keep",
3714
3796
  title: ui.demoTourKeepTitle,
3715
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourKeepBody }),
3797
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourKeepBody }),
3716
3798
  dismissLabel: ui.gotIt
3717
3799
  }
3718
3800
  ]
3719
3801
  }
3720
3802
  ),
3721
- view === "board" && saveEndpoint && /* @__PURE__ */ jsx20(
3803
+ view === "board" && saveEndpoint && /* @__PURE__ */ jsx21(
3722
3804
  GuideTour,
3723
3805
  {
3724
3806
  dismissed: state.preferences?.guideDismissed,
@@ -3727,38 +3809,38 @@ function PanelApp({
3727
3809
  {
3728
3810
  id: "welcome",
3729
3811
  title: ui.tourWelcomeTitle,
3730
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourWelcomeBody }),
3812
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourWelcomeBody }),
3731
3813
  dismissLabel: ui.gotIt
3732
3814
  },
3733
3815
  {
3734
3816
  id: "board",
3735
3817
  title: ui.tourBoardTitle,
3736
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourBoardBody }),
3818
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourBoardBody }),
3737
3819
  dismissLabel: ui.gotIt
3738
3820
  },
3739
3821
  {
3740
3822
  id: "orders",
3741
3823
  title: ui.tourOrdersTitle,
3742
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourOrdersBody }),
3824
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourOrdersBody }),
3743
3825
  dismissLabel: ui.gotIt
3744
3826
  },
3745
3827
  {
3746
3828
  id: "save",
3747
3829
  title: ui.tourSaveTitle,
3748
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourSaveBody }),
3830
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourSaveBody }),
3749
3831
  dismissLabel: ui.gotIt
3750
3832
  },
3751
3833
  {
3752
3834
  id: "theme",
3753
3835
  title: ui.tourThemeTitle,
3754
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourThemeBody }),
3836
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourThemeBody }),
3755
3837
  dismissLabel: ui.gotIt,
3756
3838
  action: { label: ui.settings, onClick: () => setSettingsOpen(true) }
3757
3839
  }
3758
3840
  ]
3759
3841
  }
3760
3842
  ),
3761
- view === "marketplace" && hasMarketplace && /* @__PURE__ */ jsx20(
3843
+ view === "marketplace" && hasMarketplace && /* @__PURE__ */ jsx21(
3762
3844
  MarketplaceView,
3763
3845
  {
3764
3846
  report: market,
@@ -3769,7 +3851,7 @@ function PanelApp({
3769
3851
  onRefresh: marketplaceEndpoint ? () => loadMarketplace(true) : void 0
3770
3852
  }
3771
3853
  ),
3772
- view === "analysis" && state.analysis && /* @__PURE__ */ jsx20(
3854
+ view === "analysis" && state.analysis && /* @__PURE__ */ jsx21(
3773
3855
  AnalysisView,
3774
3856
  {
3775
3857
  onRequestReport: saveEndpoint ? requestReport : void 0,
@@ -3785,20 +3867,52 @@ function PanelApp({
3785
3867
  onOpenCard: setOpenCardId
3786
3868
  }
3787
3869
  ),
3788
- view === "board" && /* @__PURE__ */ jsxs18(Fragment5, { children: [
3789
- /* @__PURE__ */ jsxs18("div", { className: "pt-panel-page", children: [
3790
- /* @__PURE__ */ jsxs18(StatTileGrid, { children: [
3791
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statOpen, value: counts.open, isZero: counts.open === 0 }),
3792
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statOrders, value: counts.orders, tone: "warning", isZero: counts.orders === 0 }),
3793
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statYours, value: counts.yours, tone: "danger", isZero: counts.yours === 0 }),
3794
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statDecisions, value: counts.decisions, tone: "warning", isZero: counts.decisions === 0 }),
3795
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statHighRisk, value: counts.highRisk, tone: "danger", isZero: counts.highRisk === 0 }),
3796
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statDone, value: counts.done, tone: "success", isZero: counts.done === 0 })
3870
+ view === "board" && /* @__PURE__ */ jsxs19(Fragment6, { children: [
3871
+ /* @__PURE__ */ jsxs19("div", { className: "pt-panel-page", children: [
3872
+ /* @__PURE__ */ jsx21(
3873
+ SituationRow,
3874
+ {
3875
+ blockingLabel: ui.situationBlocking,
3876
+ clearLabel: ui.situationClear,
3877
+ statusLabel: ui.situationStatus,
3878
+ blocking: [
3879
+ {
3880
+ id: "yours",
3881
+ label: ui.statYours,
3882
+ hint: ui.situationYoursHint,
3883
+ count: counts.yours,
3884
+ tone: "alarm",
3885
+ onClick: () => setFilter("yours")
3886
+ },
3887
+ {
3888
+ id: "decisions",
3889
+ label: ui.statDecisions,
3890
+ hint: ui.situationDecisionsHint,
3891
+ count: openChoices,
3892
+ tone: "alarm",
3893
+ onClick: initialState.analysis ? () => setView("analysis") : void 0
3894
+ },
3895
+ {
3896
+ id: "orders",
3897
+ label: ui.statOrders,
3898
+ hint: ui.situationOrdersHint,
3899
+ count: counts.orders,
3900
+ tone: "attention",
3901
+ onClick: () => setFilter("orders")
3902
+ }
3903
+ ],
3904
+ status: state.health.length > 0 ? /* @__PURE__ */ jsx21(HealthPillRow, { children: state.health.map((pill) => /* @__PURE__ */ jsx21(HealthPill, { label: t(pill.label), value: t(pill.value), status: pill.status }, t(pill.label))) }) : void 0
3905
+ }
3906
+ ),
3907
+ /* @__PURE__ */ jsxs19(StatTileGrid, { children: [
3908
+ /* @__PURE__ */ jsx21(StatTile, { label: ui.statOpen, value: counts.open, isZero: counts.open === 0 }),
3909
+ /* @__PURE__ */ jsx21(StatTile, { label: ui.statHighRisk, value: counts.highRisk, tone: "danger", isZero: counts.highRisk === 0 }),
3910
+ /* @__PURE__ */ jsx21(StatTile, { label: ui.statDone, value: counts.done, tone: "success", isZero: counts.done === 0 }),
3911
+ archivedCards.length > 0 && /* @__PURE__ */ jsx21(StatTile, { label: ui.statArchived, value: archivedCards.length, isZero: true })
3797
3912
  ] }),
3798
- /* @__PURE__ */ jsx20(HealthPillRow, { children: state.health.map((pill) => /* @__PURE__ */ jsx20(HealthPill, { label: t(pill.label), value: t(pill.value), status: pill.status }, t(pill.label))) }),
3799
- /* @__PURE__ */ jsxs18(FilterChipRow, { children: [
3800
- /* @__PURE__ */ jsx20(FilterChip, { label: ui.all, count: state.cards.length, active: filter === "all", onClick: () => setFilter("all") }),
3801
- /* @__PURE__ */ jsx20(
3913
+ /* @__PURE__ */ jsxs19(FilterChipRow, { children: [
3914
+ /* @__PURE__ */ jsx21(FilterChip, { label: ui.all, count: state.cards.length, active: filter === "all", onClick: () => setFilter("all") }),
3915
+ /* @__PURE__ */ jsx21(
3802
3916
  FilterChip,
3803
3917
  {
3804
3918
  label: `\u26A1 ${ui.filterForClaude}`,
@@ -3807,7 +3921,7 @@ function PanelApp({
3807
3921
  onClick: () => setFilter("orders")
3808
3922
  }
3809
3923
  ),
3810
- /* @__PURE__ */ jsx20(
3924
+ /* @__PURE__ */ jsx21(
3811
3925
  FilterChip,
3812
3926
  {
3813
3927
  label: ui.filterYours,
@@ -3816,7 +3930,7 @@ function PanelApp({
3816
3930
  onClick: () => setFilter("yours")
3817
3931
  }
3818
3932
  ),
3819
- /* @__PURE__ */ jsx20(
3933
+ /* @__PURE__ */ jsx21(
3820
3934
  FilterChip,
3821
3935
  {
3822
3936
  label: ui.filterHighRisk,
@@ -3825,7 +3939,7 @@ function PanelApp({
3825
3939
  onClick: () => setFilter("risk")
3826
3940
  }
3827
3941
  ),
3828
- state.areas.map((area) => /* @__PURE__ */ jsx20(
3942
+ state.areas.map((area) => /* @__PURE__ */ jsx21(
3829
3943
  FilterChip,
3830
3944
  {
3831
3945
  label: t(area.label),
@@ -3837,13 +3951,13 @@ function PanelApp({
3837
3951
  ))
3838
3952
  ] })
3839
3953
  ] }),
3840
- /* @__PURE__ */ jsx20(
3954
+ /* @__PURE__ */ jsx21(
3841
3955
  Board,
3842
3956
  {
3843
3957
  columns: boardColumns,
3844
3958
  onMove: moveCard,
3845
3959
  onAddCard: addCard,
3846
- renderCard: (card, index, columnId) => /* @__PURE__ */ jsx20(
3960
+ renderCard: (card, index, columnId) => /* @__PURE__ */ jsx21(
3847
3961
  Card,
3848
3962
  {
3849
3963
  cardId: card.id,
@@ -3860,51 +3974,72 @@ function PanelApp({
3860
3974
  }
3861
3975
  ),
3862
3976
  extras,
3863
- capabilities && capabilities.length > 0 && /* @__PURE__ */ jsxs18("section", { className: "pt-panel-page pt-panel-section", id: "functions", children: [
3864
- /* @__PURE__ */ jsxs18("div", { children: [
3865
- /* @__PURE__ */ jsx20("p", { className: "pt-eyebrow", children: ui.functionsEyebrow }),
3866
- /* @__PURE__ */ jsx20("h2", { className: "pt-h2", children: ui.functionsTitle }),
3867
- /* @__PURE__ */ jsx20("p", { className: "pt-sub", children: ui.functionsIntro })
3977
+ capabilities && capabilities.length > 0 && /* @__PURE__ */ jsxs19("section", { className: "pt-panel-page pt-panel-section", id: "functions", children: [
3978
+ /* @__PURE__ */ jsxs19("div", { children: [
3979
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: ui.functionsEyebrow }),
3980
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.functionsTitle }),
3981
+ /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.functionsIntro })
3868
3982
  ] }),
3869
- /* @__PURE__ */ jsx20("div", { className: "pt-cap-list", children: capabilities.map((capability) => /* @__PURE__ */ jsxs18("article", { className: "pt-cap pt-hud", children: [
3870
- /* @__PURE__ */ jsx20("h3", { className: "pt-cap__title", children: t(capability.title) }),
3871
- /* @__PURE__ */ jsx20("p", { className: "pt-cap__summary", children: t(capability.summary) }),
3872
- /* @__PURE__ */ jsx20("ul", { className: "pt-cap__list", children: capability.points.map((point) => /* @__PURE__ */ jsx20("li", { children: t(point) }, t(point))) }),
3873
- capability.code && /* @__PURE__ */ jsxs18("div", { className: "pt-cap__code", children: [
3874
- /* @__PURE__ */ jsx20("p", { className: "pt-cap__caption", children: t(capability.code.caption) }),
3875
- /* @__PURE__ */ jsx20("pre", { children: /* @__PURE__ */ jsx20("code", { children: capability.code.body }) })
3983
+ /* @__PURE__ */ jsx21("div", { className: "pt-cap-list", children: capabilities.map((capability) => /* @__PURE__ */ jsxs19("article", { className: "pt-cap pt-hud", children: [
3984
+ /* @__PURE__ */ jsx21("h3", { className: "pt-cap__title", children: t(capability.title) }),
3985
+ /* @__PURE__ */ jsx21("p", { className: "pt-cap__summary", children: t(capability.summary) }),
3986
+ /* @__PURE__ */ jsx21("ul", { className: "pt-cap__list", children: capability.points.map((point) => /* @__PURE__ */ jsx21("li", { children: t(point) }, t(point))) }),
3987
+ capability.code && /* @__PURE__ */ jsxs19("div", { className: "pt-cap__code", children: [
3988
+ /* @__PURE__ */ jsx21("p", { className: "pt-cap__caption", children: t(capability.code.caption) }),
3989
+ /* @__PURE__ */ jsx21("pre", { children: /* @__PURE__ */ jsx21("code", { children: capability.code.body }) })
3876
3990
  ] })
3877
3991
  ] }, capability.id)) })
3878
3992
  ] })
3879
3993
  ] }),
3880
- view === "history" && showHistory && /* @__PURE__ */ jsxs18("section", { className: "pt-panel-page pt-panel-section", id: "revisions", children: [
3881
- /* @__PURE__ */ jsxs18("div", { children: [
3882
- /* @__PURE__ */ jsx20("p", { className: "pt-eyebrow", children: ui.historyEyebrow }),
3883
- /* @__PURE__ */ jsx20("h2", { className: "pt-h2", children: ui.historyTitle }),
3884
- /* @__PURE__ */ jsx20("p", { className: "pt-sub", children: ui.historyIntro })
3885
- ] }),
3886
- state.runs.length === 0 ? /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.historyEmpty }) : /* @__PURE__ */ jsx20("ol", { className: "pt-runs", children: [...state.runs].reverse().map((run) => /* @__PURE__ */ jsxs18("li", { className: "pt-run pt-hud", children: [
3887
- /* @__PURE__ */ jsxs18("p", { className: "pt-run__meta", children: [
3888
- run.date,
3889
- " \xB7 ",
3890
- run.by === "claude" ? "Claude" : ui.ownerYou,
3891
- run.fingerprint ? ` \xB7 ${run.fingerprint.replace("sha256:", "").slice(0, 12)}` : ""
3994
+ view === "history" && hasRecord && /* @__PURE__ */ jsxs19("section", { className: "pt-panel-page pt-panel-section", id: "revisions", children: [
3995
+ showHistory && /* @__PURE__ */ jsxs19(Fragment6, { children: [
3996
+ /* @__PURE__ */ jsxs19("div", { children: [
3997
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: ui.historyEyebrow }),
3998
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.historyTitle }),
3999
+ /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.historyIntro })
3892
4000
  ] }),
3893
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: t(run.summary) }),
3894
- run.cards.length > 0 && /* @__PURE__ */ jsxs18("p", { className: "pt-run__cards", children: [
3895
- /* @__PURE__ */ jsxs18("span", { children: [
3896
- ui.historyTouched,
3897
- ":"
4001
+ state.runs.length === 0 ? /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.historyEmpty }) : /* @__PURE__ */ jsx21("ol", { className: "pt-runs", children: [...state.runs].reverse().map((run) => /* @__PURE__ */ jsxs19("li", { className: "pt-run pt-hud", children: [
4002
+ /* @__PURE__ */ jsxs19("p", { className: "pt-run__meta", children: [
4003
+ run.date,
4004
+ " \xB7 ",
4005
+ run.by === "claude" ? "Claude" : ui.ownerYou,
4006
+ run.fingerprint ? ` \xB7 ${run.fingerprint.replace("sha256:", "").slice(0, 12)}` : ""
3898
4007
  ] }),
3899
- " ",
3900
- run.cards.map((id) => {
3901
- const card = state.cards.find((candidate) => candidate.id === id);
3902
- return card ? t(card.title) || ui.untitled : id;
3903
- }).join(" \xB7 ")
3904
- ] })
3905
- ] }, run.id)) })
4008
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: t(run.summary) }),
4009
+ run.cards.length > 0 && /* @__PURE__ */ jsxs19("p", { className: "pt-run__cards", children: [
4010
+ /* @__PURE__ */ jsxs19("span", { children: [
4011
+ ui.historyTouched,
4012
+ ":"
4013
+ ] }),
4014
+ " ",
4015
+ run.cards.map((id) => {
4016
+ const card = state.cards.find((candidate) => candidate.id === id);
4017
+ return card ? t(card.title) || ui.untitled : id;
4018
+ }).join(" \xB7 ")
4019
+ ] })
4020
+ ] }, run.id)) })
4021
+ ] }),
4022
+ archivedCards.length > 0 && /* @__PURE__ */ jsxs19(Fragment6, { children: [
4023
+ /* @__PURE__ */ jsxs19("div", { children: [
4024
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: ui.archiveTitle }),
4025
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.archiveHeading }),
4026
+ /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.archiveIntro })
4027
+ ] }),
4028
+ /* @__PURE__ */ jsx21("ol", { className: "pt-archive", children: archivedCards.slice().sort((a, b) => (b.completedAt ?? "").localeCompare(a.completedAt ?? "")).map((card) => /* @__PURE__ */ jsx21("li", { children: /* @__PURE__ */ jsxs19(
4029
+ "button",
4030
+ {
4031
+ type: "button",
4032
+ className: "pt-archive__row",
4033
+ onClick: () => setOpenCardId(card.id),
4034
+ children: [
4035
+ /* @__PURE__ */ jsx21("span", { className: "pt-archive__title", children: t(card.title) || ui.untitled }),
4036
+ /* @__PURE__ */ jsx21("span", { className: "pt-archive__meta", children: card.completedAt ? ui.archiveFinished(card.completedAt) : "" })
4037
+ ]
4038
+ }
4039
+ ) }, card.id)) })
4040
+ ] })
3906
4041
  ] }),
3907
- /* @__PURE__ */ jsx20(
4042
+ /* @__PURE__ */ jsx21(
3908
4043
  CardSheet,
3909
4044
  {
3910
4045
  card: openCard,
@@ -3916,7 +4051,7 @@ function PanelApp({
3916
4051
  onClose: () => setOpenCardId(null)
3917
4052
  }
3918
4053
  ),
3919
- /* @__PURE__ */ jsx20(
4054
+ /* @__PURE__ */ jsx21(
3920
4055
  DetailSheet,
3921
4056
  {
3922
4057
  open: wizardOpen,
@@ -3925,7 +4060,7 @@ function PanelApp({
3925
4060
  setWizardOpen(false);
3926
4061
  },
3927
4062
  ariaLabel: ui.wizardTitle,
3928
- children: /* @__PURE__ */ jsx20(
4063
+ children: /* @__PURE__ */ jsx21(
3929
4064
  SetupWizard,
3930
4065
  {
3931
4066
  requirements,
@@ -3957,9 +4092,9 @@ function PanelApp({
3957
4092
  )
3958
4093
  }
3959
4094
  ),
3960
- /* @__PURE__ */ jsxs18(DetailSheet, { open: helpOpen, onClose: () => setHelpOpen(false), ariaLabel: ui.helpTitle, children: [
3961
- /* @__PURE__ */ jsx20(DetailSection, { title: ui.helpTitle, children: !setup ? /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.setupChecking }) : /* @__PURE__ */ jsxs18(Fragment5, { children: [
3962
- /* @__PURE__ */ jsx20(
4095
+ /* @__PURE__ */ jsxs19(DetailSheet, { open: helpOpen, onClose: () => setHelpOpen(false), ariaLabel: ui.helpTitle, children: [
4096
+ /* @__PURE__ */ jsx21(DetailSection, { title: ui.helpTitle, children: !setup ? /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.setupChecking }) : /* @__PURE__ */ jsxs19(Fragment6, { children: [
4097
+ /* @__PURE__ */ jsx21(
3963
4098
  SetupGuide,
3964
4099
  {
3965
4100
  requirements,
@@ -3972,8 +4107,8 @@ function PanelApp({
3972
4107
  }
3973
4108
  }
3974
4109
  ),
3975
- setup.repo && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 12 }, children: ui.setupWriteTarget(setup.repo, setup.branch, setup.file) }),
3976
- !setup.ready && /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", style: { marginTop: 12 }, children: /* @__PURE__ */ jsx20(
4110
+ setup.repo && /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 12 }, children: ui.setupWriteTarget(setup.repo, setup.branch, setup.file) }),
4111
+ !setup.ready && /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", style: { marginTop: 12 }, children: /* @__PURE__ */ jsx21(
3977
4112
  "button",
3978
4113
  {
3979
4114
  type: "button",
@@ -3986,7 +4121,7 @@ function PanelApp({
3986
4121
  }
3987
4122
  ) })
3988
4123
  ] }) }),
3989
- /* @__PURE__ */ jsx20(DetailSection, { title: ui.guideSection, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx20(
4124
+ /* @__PURE__ */ jsx21(DetailSection, { title: ui.guideSection, children: /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
3990
4125
  "button",
3991
4126
  {
3992
4127
  type: "button",
@@ -4004,24 +4139,24 @@ function PanelApp({
4004
4139
  }
4005
4140
  ) }) })
4006
4141
  ] }),
4007
- update?.behind && /* @__PURE__ */ jsxs18(
4142
+ update?.behind && /* @__PURE__ */ jsxs19(
4008
4143
  DetailSheet,
4009
4144
  {
4010
4145
  open: releaseOpen,
4011
4146
  onClose: () => setReleaseOpen(false),
4012
4147
  ariaLabel: ui.releaseTitle(update.latest),
4013
4148
  children: [
4014
- /* @__PURE__ */ jsxs18("div", { children: [
4015
- /* @__PURE__ */ jsx20("p", { className: "pt-eyebrow", children: releaseShape(update.notes) ? ui.releaseShape[releaseShape(update.notes)] : "" }),
4016
- /* @__PURE__ */ jsx20("h2", { className: "pt-h2", children: ui.releaseTitle(update.latest) }),
4017
- update.notes?.date && /* @__PURE__ */ jsx20("p", { className: "pt-sub", children: ui.releaseDate(update.notes.date) })
4149
+ /* @__PURE__ */ jsxs19("div", { children: [
4150
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: releaseShape(update.notes) ? ui.releaseShape[releaseShape(update.notes)] : "" }),
4151
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.releaseTitle(update.latest) }),
4152
+ update.notes?.date && /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.releaseDate(update.notes.date) })
4018
4153
  ] }),
4019
- update.notes ? /* @__PURE__ */ jsx20("ul", { className: "pt-runs", children: update.notes.entries.map((item, index) => /* @__PURE__ */ jsxs18("li", { className: "pt-run pt-hud", children: [
4020
- /* @__PURE__ */ jsx20("p", { className: "pt-run__meta", children: ui.releaseKind[item.kind] }),
4021
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: item.text[lang] })
4022
- ] }, index)) }) : /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.releaseNone }),
4023
- /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", style: { marginTop: 16 }, children: [
4024
- /* @__PURE__ */ jsx20(
4154
+ update.notes ? /* @__PURE__ */ jsx21("ul", { className: "pt-runs", children: update.notes.entries.map((item, index) => /* @__PURE__ */ jsxs19("li", { className: "pt-run pt-hud", children: [
4155
+ /* @__PURE__ */ jsx21("p", { className: "pt-run__meta", children: ui.releaseKind[item.kind] }),
4156
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: item.text[lang] })
4157
+ ] }, index)) }) : /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.releaseNone }),
4158
+ /* @__PURE__ */ jsxs19("div", { className: "pt-panel-row", style: { marginTop: 16 }, children: [
4159
+ /* @__PURE__ */ jsx21(
4025
4160
  "button",
4026
4161
  {
4027
4162
  type: "button",
@@ -4033,14 +4168,14 @@ function PanelApp({
4033
4168
  children: ui.updateCreateCard
4034
4169
  }
4035
4170
  ),
4036
- /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn", onClick: () => setReleaseOpen(false), children: ui.releaseClose })
4171
+ /* @__PURE__ */ jsx21("button", { type: "button", className: "pt-btn", onClick: () => setReleaseOpen(false), children: ui.releaseClose })
4037
4172
  ] })
4038
4173
  ]
4039
4174
  }
4040
4175
  ),
4041
- /* @__PURE__ */ jsxs18(DetailSheet, { open: settingsOpen, onClose: () => setSettingsOpen(false), ariaLabel: ui.panelSettings, children: [
4042
- saveEndpoint ? /* @__PURE__ */ jsxs18(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: [
4043
- /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx20(
4176
+ /* @__PURE__ */ jsxs19(DetailSheet, { open: settingsOpen, onClose: () => setSettingsOpen(false), ariaLabel: ui.panelSettings, children: [
4177
+ saveEndpoint ? /* @__PURE__ */ jsxs19(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: [
4178
+ /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
4044
4179
  "button",
4045
4180
  {
4046
4181
  type: "button",
@@ -4050,15 +4185,15 @@ function PanelApp({
4050
4185
  children: save.status === "saving" ? ui.saving : ui.save
4051
4186
  }
4052
4187
  ) }),
4053
- /* @__PURE__ */ jsxs18("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: [
4188
+ /* @__PURE__ */ jsxs19("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: [
4054
4189
  save.status === "error" ? `${ui.saveFailed}: ${save.message}` : save.status === "saved" ? ui.savedWithCommit : dirty ? ui.saveHelp : ui.upToDate,
4055
- save.status === "saved" && save.url && /* @__PURE__ */ jsxs18(Fragment5, { children: [
4190
+ save.status === "saved" && save.url && /* @__PURE__ */ jsxs19(Fragment6, { children: [
4056
4191
  " ",
4057
- /* @__PURE__ */ jsx20("a", { href: save.url, children: "commit" })
4192
+ /* @__PURE__ */ jsx21("a", { href: save.url, children: "commit" })
4058
4193
  ] })
4059
4194
  ] })
4060
- ] }) : /* @__PURE__ */ jsx20(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.demoNotice }) }),
4061
- showLanguage && /* @__PURE__ */ jsx20(DetailSection, { title: ui.language, subtitle: ui.languageSubtitle, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LANGS.map((code) => /* @__PURE__ */ jsx20(
4195
+ ] }) : /* @__PURE__ */ jsx21(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.demoNotice }) }),
4196
+ showLanguage && /* @__PURE__ */ jsx21(DetailSection, { title: ui.language, subtitle: ui.languageSubtitle, children: /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: LANGS.map((code) => /* @__PURE__ */ jsx21(
4062
4197
  FilterChip,
4063
4198
  {
4064
4199
  label: LANG_LABELS[code],
@@ -4067,9 +4202,9 @@ function PanelApp({
4067
4202
  },
4068
4203
  code
4069
4204
  )) }) }),
4070
- /* @__PURE__ */ jsxs18(DetailSection, { title: ui.theme, subtitle: ui.themeSubtitle, children: [
4071
- /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", children: [
4072
- Object.entries(themes).map(([name, entry]) => /* @__PURE__ */ jsx20(
4205
+ /* @__PURE__ */ jsxs19(DetailSection, { title: ui.theme, subtitle: ui.themeSubtitle, children: [
4206
+ /* @__PURE__ */ jsxs19("div", { className: "pt-panel-row", children: [
4207
+ Object.entries(themes).map(([name, entry]) => /* @__PURE__ */ jsx21(
4073
4208
  FilterChip,
4074
4209
  {
4075
4210
  label: entry.label,
@@ -4078,7 +4213,7 @@ function PanelApp({
4078
4213
  },
4079
4214
  name
4080
4215
  )),
4081
- state.importedTheme && /* @__PURE__ */ jsx20(
4216
+ state.importedTheme && /* @__PURE__ */ jsx21(
4082
4217
  FilterChip,
4083
4218
  {
4084
4219
  label: t(state.importedTheme.label),
@@ -4087,21 +4222,21 @@ function PanelApp({
4087
4222
  }
4088
4223
  )
4089
4224
  ] }),
4090
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: themeName === IMPORTED ? t(imported?.from.reasoning) : [chosen.note, ui.themeNote].filter(Boolean).join(". ") }),
4091
- state.importedTheme && /* @__PURE__ */ jsxs18("div", { className: "pt-cap pt-hud", style: { marginTop: 14 }, children: [
4092
- /* @__PURE__ */ jsx20("h3", { className: "pt-cap__title", children: ui.importedTheme }),
4093
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.importedFrom(state.importedTheme.importedAt, state.importedTheme.from.files.join(", ")) }),
4094
- state.importedTheme.from.colours.length > 0 && /* @__PURE__ */ jsx20("p", { className: "pt-tool__tags", children: state.importedTheme.from.colours.map((colour) => /* @__PURE__ */ jsx20("span", { className: "pt-tool__tag", children: colour }, colour)) }),
4095
- state.importedTheme.refreshRequested ? /* @__PURE__ */ jsx20("p", { className: "pt-warn", children: ui.importedRefreshAsked(state.importedTheme.refreshRequested) }) : /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", style: { marginTop: 10 }, children: /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: requestThemeRefresh, children: ui.importedRefresh }) }),
4096
- /* @__PURE__ */ jsx20("p", { className: "pt-marketplace__detail", children: ui.importedRefreshHow })
4225
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: themeName === IMPORTED ? t(imported?.from.reasoning) : [chosen.note, ui.themeNote].filter(Boolean).join(". ") }),
4226
+ state.importedTheme && /* @__PURE__ */ jsxs19("div", { className: "pt-cap pt-hud", style: { marginTop: 14 }, children: [
4227
+ /* @__PURE__ */ jsx21("h3", { className: "pt-cap__title", children: ui.importedTheme }),
4228
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.importedFrom(state.importedTheme.importedAt, state.importedTheme.from.files.join(", ")) }),
4229
+ state.importedTheme.from.colours.length > 0 && /* @__PURE__ */ jsx21("p", { className: "pt-tool__tags", children: state.importedTheme.from.colours.map((colour) => /* @__PURE__ */ jsx21("span", { className: "pt-tool__tag", children: colour }, colour)) }),
4230
+ state.importedTheme.refreshRequested ? /* @__PURE__ */ jsx21("p", { className: "pt-warn", children: ui.importedRefreshAsked(state.importedTheme.refreshRequested) }) : /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", style: { marginTop: 10 }, children: /* @__PURE__ */ jsx21("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: requestThemeRefresh, children: ui.importedRefresh }) }),
4231
+ /* @__PURE__ */ jsx21("p", { className: "pt-marketplace__detail", children: ui.importedRefreshHow })
4097
4232
  ] })
4098
4233
  ] }),
4099
- checkForUpdates && fingerprint?.version && /* @__PURE__ */ jsxs18(DetailSection, { title: ui.updateTitle, subtitle: ui.updateSubtitle, children: [
4100
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.updateCurrent(fingerprint.version) }),
4101
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: !update ? ui.updateUnknown : update.behind ? ui.updateAvailable(update.latest) : ui.updateUpToDate }),
4102
- update?.behind && (state.cards.some((card) => card.id === updateCardId(update.latest)) ? /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: ui.updateCardExists }) : /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", style: { marginTop: 12 }, children: /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn", onClick: addUpdateCard, children: ui.updateCreateCard }) })),
4103
- /* @__PURE__ */ jsxs18("label", { className: "pt-panel-row", style: { marginTop: 12 }, children: [
4104
- /* @__PURE__ */ jsx20(
4234
+ checkForUpdates && fingerprint?.version && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.updateTitle, subtitle: ui.updateSubtitle, children: [
4235
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.updateCurrent(fingerprint.version) }),
4236
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: !update ? ui.updateUnknown : update.behind ? ui.updateAvailable(update.latest) : ui.updateUpToDate }),
4237
+ update?.behind && (state.cards.some((card) => card.id === updateCardId(update.latest)) ? /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: ui.updateCardExists }) : /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", style: { marginTop: 12 }, children: /* @__PURE__ */ jsx21("button", { type: "button", className: "pt-btn", onClick: addUpdateCard, children: ui.updateCreateCard }) })),
4238
+ /* @__PURE__ */ jsxs19("label", { className: "pt-panel-row", style: { marginTop: 12 }, children: [
4239
+ /* @__PURE__ */ jsx21(
4105
4240
  "input",
4106
4241
  {
4107
4242
  type: "checkbox",
@@ -4109,16 +4244,16 @@ function PanelApp({
4109
4244
  onChange: (event) => setPreference("updateAsOrder", event.target.checked)
4110
4245
  }
4111
4246
  ),
4112
- /* @__PURE__ */ jsx20("span", { className: "pt-panel-text", children: ui.updateAsOrder })
4247
+ /* @__PURE__ */ jsx21("span", { className: "pt-panel-text", children: ui.updateAsOrder })
4113
4248
  ] }),
4114
- /* @__PURE__ */ jsx20("p", { className: "pt-marketplace__detail", children: ui.updateAsOrderHow })
4249
+ /* @__PURE__ */ jsx21("p", { className: "pt-marketplace__detail", children: ui.updateAsOrderHow })
4115
4250
  ] }),
4116
- fingerprint && /* @__PURE__ */ jsxs18(DetailSection, { title: ui.fingerprint, subtitle: ui.fingerprintSubtitle, children: [
4117
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-mono", children: fingerprint.hash }),
4118
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: ui.trackedFiles(fingerprint.fileCount, fingerprint.version) })
4251
+ fingerprint && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.fingerprint, subtitle: ui.fingerprintSubtitle, children: [
4252
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-mono", children: fingerprint.hash }),
4253
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: ui.trackedFiles(fingerprint.fileCount, fingerprint.version) })
4119
4254
  ] }),
4120
- saveEndpoint && /* @__PURE__ */ jsxs18(DetailSection, { title: ui.session, subtitle: ui.sessionSubtitle, children: [
4121
- /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx20(
4255
+ saveEndpoint && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.session, subtitle: ui.sessionSubtitle, children: [
4256
+ /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
4122
4257
  "button",
4123
4258
  {
4124
4259
  type: "button",
@@ -4128,11 +4263,11 @@ function PanelApp({
4128
4263
  children: signOut === "working" ? ui.signingOut : ui.signOut
4129
4264
  }
4130
4265
  ) }),
4131
- signOut === "failed" && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: ui.signOutFailed })
4266
+ signOut === "failed" && /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: ui.signOutFailed })
4132
4267
  ] }),
4133
- links && links.length > 0 && /* @__PURE__ */ jsx20(DetailSection, { title: ui.links, children: /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: links.map((link, index) => /* @__PURE__ */ jsxs18(React13.Fragment, { children: [
4268
+ links && links.length > 0 && /* @__PURE__ */ jsx21(DetailSection, { title: ui.links, children: /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: links.map((link, index) => /* @__PURE__ */ jsxs19(React13.Fragment, { children: [
4134
4269
  index > 0 && " \xB7 ",
4135
- /* @__PURE__ */ jsx20("a", { href: link.href, children: link.label })
4270
+ /* @__PURE__ */ jsx21("a", { href: link.href, children: link.label })
4136
4271
  ] }, link.href)) }) })
4137
4272
  ] }),
4138
4273
  footer
@@ -4338,6 +4473,7 @@ export {
4338
4473
  PanelApp,
4339
4474
  SetupGuide,
4340
4475
  SetupWizard,
4476
+ SituationRow,
4341
4477
  StatTile,
4342
4478
  StatTileGrid,
4343
4479
  THEME_FORMS,
@@ -4352,6 +4488,7 @@ export {
4352
4488
  countCards,
4353
4489
  cyberpunkTheme,
4354
4490
  decided,
4491
+ dropIndex,
4355
4492
  emptyCard,
4356
4493
  explainBoard,
4357
4494
  gateStatus,
@@ -4367,6 +4504,7 @@ export {
4367
4504
  panelForm,
4368
4505
  paneltirBuild,
4369
4506
  paperForm,
4507
+ queueColumn,
4370
4508
  readBoard,
4371
4509
  readStoredLang,
4372
4510
  repositorySnippet,
@@ -4385,6 +4523,7 @@ export {
4385
4523
  useGuideNote,
4386
4524
  useMediaQuery,
4387
4525
  validateBoard,
4526
+ warRoomForm,
4388
4527
  wizardStep,
4389
4528
  writeText
4390
4529
  };