paneltir 0.10.1 → 0.12.0

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.10.1";
3
- var PANELTIR_FINGERPRINT = "sha256:b2d1daf120972ce3bfc54f3a9f09bccaddd6ceb306a65a1682b810012d85f33d";
4
- var PANELTIR_FILE_COUNT = 163;
5
- var PANELTIR_TEMPLATE_HASH = "sha256:034ba27266408af4f2ba5793d9cefbe448b168570d6a0b87dfe698dfe639feb1";
2
+ var PANELTIR_VERSION = "0.12.0";
3
+ var PANELTIR_FINGERPRINT = "sha256:ea981bdb1de721f4d2afd279244a7298b025773fb4a5abf8ffa33868c0d73f7d";
4
+ var PANELTIR_FILE_COUNT = 166;
5
+ var PANELTIR_TEMPLATE_HASH = "sha256:c0c1a1678d860212ff82d55c7e7c0ee3eaf8be623621cadbb6ca5bf51b31e2ba";
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,15 +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" }),
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" })
355
+ dnd.isDragging && dnd.dropTarget?.columnId === column.id && dnd.dropTarget.index === column.cards.length && /* @__PURE__ */ jsx9("div", { className: "pt-card-placeholder" }),
356
+ column.footer ? /* @__PURE__ */ jsx9("div", { className: "pt-column__footer", children: column.footer }) : null
310
357
  ] })
311
358
  ] });
312
359
  }
@@ -489,22 +536,22 @@ function useBoardDnD({ columns, onMove, scrollContainerRef }) {
489
536
  }
490
537
 
491
538
  // src/components/Board/Board.tsx
492
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
539
+ import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
493
540
  function Board({ columns, renderCard, onMove, onAddCard }) {
494
541
  const scrollRef = useRef3(null);
495
542
  const dnd = useBoardDnD({ columns, onMove, scrollContainerRef: scrollRef });
496
- return /* @__PURE__ */ jsxs7(BoardDndProvider, { value: dnd, children: [
497
- /* @__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)) }),
498
- /* @__PURE__ */ jsx9("div", { className: "pt-board__clone-layer", ref: dnd.cloneLayerRef })
543
+ return /* @__PURE__ */ jsxs8(BoardDndProvider, { value: dnd, children: [
544
+ /* @__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)) }),
545
+ /* @__PURE__ */ jsx10("div", { className: "pt-board__clone-layer", ref: dnd.cloneLayerRef })
499
546
  ] });
500
547
  }
501
548
 
502
549
  // src/components/Board/Card.tsx
503
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
550
+ import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
504
551
  function Card({ cardId, columnId, index, title, priorityColor, tags, progress, children, onClick }) {
505
552
  const dnd = useBoardDnDContext();
506
553
  const isDraggedSource = dnd.drag?.cardId === cardId;
507
- return /* @__PURE__ */ jsxs8(
554
+ return /* @__PURE__ */ jsxs9(
508
555
  "div",
509
556
  {
510
557
  className: `pt-card${isDraggedSource ? " pt-card--dragging-source" : ""}`,
@@ -513,8 +560,8 @@ function Card({ cardId, columnId, index, title, priorityColor, tags, progress, c
513
560
  style: priorityColor ? { "--pt-card-stripe": priorityColor } : void 0,
514
561
  onClick,
515
562
  children: [
516
- /* @__PURE__ */ jsxs8("div", { className: "pt-card__row", children: [
517
- /* @__PURE__ */ jsx10(
563
+ /* @__PURE__ */ jsxs9("div", { className: "pt-card__row", children: [
564
+ /* @__PURE__ */ jsx11(
518
565
  "button",
519
566
  {
520
567
  type: "button",
@@ -524,10 +571,10 @@ function Card({ cardId, columnId, index, title, priorityColor, tags, progress, c
524
571
  children: "\u283F"
525
572
  }
526
573
  ),
527
- /* @__PURE__ */ jsx10("div", { className: "pt-card__title", children: title })
574
+ /* @__PURE__ */ jsx11("div", { className: "pt-card__title", children: title })
528
575
  ] }),
529
- 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)) }),
530
- progress && /* @__PURE__ */ jsxs8("div", { className: `pt-card__progress${progress.done >= progress.total ? " is-complete" : ""}`, children: [
576
+ 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)) }),
577
+ progress && /* @__PURE__ */ jsxs9("div", { className: `pt-card__progress${progress.done >= progress.total ? " is-complete" : ""}`, children: [
531
578
  progress.done,
532
579
  "/",
533
580
  progress.total
@@ -562,7 +609,7 @@ function moveCardInColumns(columns, move) {
562
609
 
563
610
  // src/components/DetailSheet/DetailSheet.tsx
564
611
  import { useEffect as useEffect3 } from "react";
565
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
612
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
566
613
  function DetailSheet({ open, onClose, children, ariaLabel }) {
567
614
  useEffect3(() => {
568
615
  if (!open) return;
@@ -573,16 +620,16 @@ function DetailSheet({ open, onClose, children, ariaLabel }) {
573
620
  return () => window.removeEventListener("keydown", handleKey);
574
621
  }, [open, onClose]);
575
622
  if (!open) return null;
576
- 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: [
577
- /* @__PURE__ */ jsx11("div", { className: "pt-sheet__handle" }),
623
+ return /* @__PURE__ */ jsx12("div", { className: "pt-sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ jsxs10("div", { className: "pt-sheet", role: "dialog", "aria-modal": "true", "aria-label": ariaLabel, onClick: (e) => e.stopPropagation(), children: [
624
+ /* @__PURE__ */ jsx12("div", { className: "pt-sheet__handle" }),
578
625
  children
579
626
  ] }) });
580
627
  }
581
628
  function DetailSection({ title, subtitle, children }) {
582
- return /* @__PURE__ */ jsxs9("section", { className: "pt-detail-section", children: [
583
- /* @__PURE__ */ jsxs9("h3", { className: "pt-detail-section__title", children: [
629
+ return /* @__PURE__ */ jsxs10("section", { className: "pt-detail-section", children: [
630
+ /* @__PURE__ */ jsxs10("h3", { className: "pt-detail-section__title", children: [
584
631
  title,
585
- subtitle && /* @__PURE__ */ jsxs9("span", { className: "pt-detail-section__subtitle", children: [
632
+ subtitle && /* @__PURE__ */ jsxs10("span", { className: "pt-detail-section__subtitle", children: [
586
633
  " \u2014 ",
587
634
  subtitle
588
635
  ] })
@@ -593,7 +640,7 @@ function DetailSection({ title, subtitle, children }) {
593
640
 
594
641
  // src/components/Guide/Guide.tsx
595
642
  import { useCallback as useCallback2, useEffect as useEffect4, useState as useState2 } from "react";
596
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
643
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
597
644
  import { createElement } from "react";
598
645
  var STORE_PREFIX = "pt-guide:";
599
646
  function readDismissed(key) {
@@ -647,19 +694,19 @@ function GuideNote({
647
694
  dismiss();
648
695
  onDismissed?.();
649
696
  };
650
- return /* @__PURE__ */ jsxs10("aside", { className: "pt-guide", role: "note", children: [
651
- /* @__PURE__ */ jsxs10("div", { className: "pt-guide__head", children: [
652
- /* @__PURE__ */ jsx12("p", { className: "pt-guide__title", children: title }),
653
- step && /* @__PURE__ */ jsxs10("span", { className: "pt-guide__step", "aria-label": `Step ${step.index} of ${step.total}`, children: [
697
+ return /* @__PURE__ */ jsxs11("aside", { className: "pt-guide", role: "note", children: [
698
+ /* @__PURE__ */ jsxs11("div", { className: "pt-guide__head", children: [
699
+ /* @__PURE__ */ jsx13("p", { className: "pt-guide__title", children: title }),
700
+ step && /* @__PURE__ */ jsxs11("span", { className: "pt-guide__step", "aria-label": `Step ${step.index} of ${step.total}`, children: [
654
701
  step.index,
655
702
  "/",
656
703
  step.total
657
704
  ] })
658
705
  ] }),
659
- /* @__PURE__ */ jsx12("div", { className: "pt-guide__body", children }),
660
- /* @__PURE__ */ jsxs10("div", { className: "pt-guide__actions", children: [
661
- action && /* @__PURE__ */ jsx12("button", { type: "button", className: "pt-guide__do", onClick: action.onClick, children: action.label }),
662
- /* @__PURE__ */ jsx12("button", { type: "button", className: "pt-guide__dismiss", onClick: close, children: dismissLabel })
706
+ /* @__PURE__ */ jsx13("div", { className: "pt-guide__body", children }),
707
+ /* @__PURE__ */ jsxs11("div", { className: "pt-guide__actions", children: [
708
+ action && /* @__PURE__ */ jsx13("button", { type: "button", className: "pt-guide__do", onClick: action.onClick, children: action.label }),
709
+ /* @__PURE__ */ jsx13("button", { type: "button", className: "pt-guide__dismiss", onClick: close, children: dismissLabel })
663
710
  ] })
664
711
  ] });
665
712
  }
@@ -693,7 +740,7 @@ function GuideTour({ notes, dismissed, onDismiss }) {
693
740
 
694
741
  // src/components/Notifications/Notifications.tsx
695
742
  import { useCallback as useCallback3, useEffect as useEffect5, useMemo as useMemo2, useRef as useRef4, useState as useState3 } from "react";
696
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
743
+ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
697
744
  var STORE_KEY = "pt-seen";
698
745
  function readSeen() {
699
746
  try {
@@ -759,8 +806,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
759
806
  );
760
807
  if (!seen) return null;
761
808
  const count = unread.length;
762
- return /* @__PURE__ */ jsxs11("div", { className: "pt-bell", ref: root, children: [
763
- /* @__PURE__ */ jsxs11(
809
+ return /* @__PURE__ */ jsxs12("div", { className: "pt-bell", ref: root, children: [
810
+ /* @__PURE__ */ jsxs12(
764
811
  "button",
765
812
  {
766
813
  type: "button",
@@ -770,8 +817,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
770
817
  title: count ? `${text2.title} \u2014 ${text2.unread(count)}` : text2.title,
771
818
  onClick: () => setOpen((v) => !v),
772
819
  children: [
773
- /* @__PURE__ */ jsx13("span", { className: "pt-bell__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs11("svg", { viewBox: "0 0 16 16", width: "15", height: "15", children: [
774
- /* @__PURE__ */ jsx13(
820
+ /* @__PURE__ */ jsx14("span", { className: "pt-bell__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsxs12("svg", { viewBox: "0 0 16 16", width: "15", height: "15", children: [
821
+ /* @__PURE__ */ jsx14(
775
822
  "path",
776
823
  {
777
824
  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",
@@ -781,17 +828,17 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
781
828
  strokeLinejoin: "round"
782
829
  }
783
830
  ),
784
- /* @__PURE__ */ jsx13("path", { d: "M6.5 12a1.5 1.5 0 0 0 3 0", fill: "none", stroke: "currentColor", strokeWidth: "1.3" })
831
+ /* @__PURE__ */ jsx14("path", { d: "M6.5 12a1.5 1.5 0 0 0 3 0", fill: "none", stroke: "currentColor", strokeWidth: "1.3" })
785
832
  ] }) }),
786
- /* @__PURE__ */ jsx13("span", { className: "pt-sr-only", children: count ? text2.unread(count) : text2.title }),
787
- count > 0 && /* @__PURE__ */ jsx13("span", { className: "pt-bell__count", "aria-hidden": "true", children: count > 99 ? "99+" : count })
833
+ /* @__PURE__ */ jsx14("span", { className: "pt-sr-only", children: count ? text2.unread(count) : text2.title }),
834
+ count > 0 && /* @__PURE__ */ jsx14("span", { className: "pt-bell__count", "aria-hidden": "true", children: count > 99 ? "99+" : count })
788
835
  ]
789
836
  }
790
837
  ),
791
- open && /* @__PURE__ */ jsxs11("div", { className: "pt-bell__panel", role: "dialog", "aria-label": text2.title, children: [
792
- /* @__PURE__ */ jsxs11("div", { className: "pt-bell__head", children: [
793
- /* @__PURE__ */ jsx13("p", { className: "pt-bell__title", children: text2.title }),
794
- count > 0 && /* @__PURE__ */ jsx13(
838
+ open && /* @__PURE__ */ jsxs12("div", { className: "pt-bell__panel", role: "dialog", "aria-label": text2.title, children: [
839
+ /* @__PURE__ */ jsxs12("div", { className: "pt-bell__head", children: [
840
+ /* @__PURE__ */ jsx14("p", { className: "pt-bell__title", children: text2.title }),
841
+ count > 0 && /* @__PURE__ */ jsx14(
795
842
  "button",
796
843
  {
797
844
  type: "button",
@@ -801,7 +848,7 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
801
848
  }
802
849
  )
803
850
  ] }),
804
- 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(
851
+ 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(
805
852
  "button",
806
853
  {
807
854
  type: "button",
@@ -812,11 +859,11 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
812
859
  if (item.onOpen) setOpen(false);
813
860
  },
814
861
  children: [
815
- /* @__PURE__ */ jsx13("span", { className: "pt-bell__mark", "aria-hidden": "true" }),
816
- /* @__PURE__ */ jsxs11("span", { className: "pt-bell__body", children: [
817
- /* @__PURE__ */ jsx13("span", { className: "pt-bell__item-title", children: item.title }),
818
- item.detail && /* @__PURE__ */ jsx13("span", { className: "pt-bell__detail", children: item.detail }),
819
- item.at && /* @__PURE__ */ jsx13("span", { className: "pt-bell__at", children: item.at })
862
+ /* @__PURE__ */ jsx14("span", { className: "pt-bell__mark", "aria-hidden": "true" }),
863
+ /* @__PURE__ */ jsxs12("span", { className: "pt-bell__body", children: [
864
+ /* @__PURE__ */ jsx14("span", { className: "pt-bell__item-title", children: item.title }),
865
+ item.detail && /* @__PURE__ */ jsx14("span", { className: "pt-bell__detail", children: item.detail }),
866
+ item.at && /* @__PURE__ */ jsx14("span", { className: "pt-bell__at", children: item.at })
820
867
  ] })
821
868
  ]
822
869
  }
@@ -827,7 +874,7 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
827
874
 
828
875
  // src/components/CopyBlock/CopyBlock.tsx
829
876
  import { useCallback as useCallback4, useEffect as useEffect6, useRef as useRef5, useState as useState4 } from "react";
830
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
877
+ import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
831
878
  var DEFAULT_LABELS2 = {
832
879
  copy: "Copy",
833
880
  copied: "Copied",
@@ -868,21 +915,21 @@ function CopyBlock({ text: text2, label, note, labels }) {
868
915
  }
869
916
  if (select()) announce("selected");
870
917
  }, [announce, select, text2]);
871
- return /* @__PURE__ */ jsxs12("div", { className: "pt-copy", children: [
872
- /* @__PURE__ */ jsxs12("div", { className: "pt-copy__head", children: [
873
- /* @__PURE__ */ jsxs12("div", { className: "pt-copy__meta", children: [
874
- label && /* @__PURE__ */ jsx14("p", { className: "pt-copy__label", children: label }),
875
- note && /* @__PURE__ */ jsx14("p", { className: "pt-copy__note", children: note })
918
+ return /* @__PURE__ */ jsxs13("div", { className: "pt-copy", children: [
919
+ /* @__PURE__ */ jsxs13("div", { className: "pt-copy__head", children: [
920
+ /* @__PURE__ */ jsxs13("div", { className: "pt-copy__meta", children: [
921
+ label && /* @__PURE__ */ jsx15("p", { className: "pt-copy__label", children: label }),
922
+ note && /* @__PURE__ */ jsx15("p", { className: "pt-copy__note", children: note })
876
923
  ] }),
877
- /* @__PURE__ */ jsx14("button", { type: "button", className: "pt-copy__button", onClick: copy, children: result === "copied" ? words.copied : result === "selected" ? words.selected : words.copy })
924
+ /* @__PURE__ */ jsx15("button", { type: "button", className: "pt-copy__button", onClick: copy, children: result === "copied" ? words.copied : result === "selected" ? words.selected : words.copy })
878
925
  ] }),
879
- /* @__PURE__ */ jsx14("div", { className: "pt-copy__body", children: /* @__PURE__ */ jsx14("pre", { className: "pt-copy__text", ref: pre, children: text2 }) }),
880
- /* @__PURE__ */ jsx14("p", { className: "pt-sr-only", role: "status", children: result === "copied" ? words.copied : result === "selected" ? words.selected : "" })
926
+ /* @__PURE__ */ jsx15("div", { className: "pt-copy__body", children: /* @__PURE__ */ jsx15("pre", { className: "pt-copy__text", ref: pre, children: text2 }) }),
927
+ /* @__PURE__ */ jsx15("p", { className: "pt-sr-only", role: "status", children: result === "copied" ? words.copied : result === "selected" ? words.selected : "" })
881
928
  ] });
882
929
  }
883
930
 
884
931
  // src/components/Setup/SetupGuide.tsx
885
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
932
+ import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
886
933
  var DEFAULT_LABELS3 = {
887
934
  ok: "in place",
888
935
  missing: "not set",
@@ -893,23 +940,23 @@ function SetupGuide({ requirements, readyMessage, labels }) {
893
940
  const text2 = { ...DEFAULT_LABELS3, ...labels };
894
941
  const missing = requirements.filter((r) => r.status === "missing");
895
942
  const allOk = requirements.length > 0 && missing.length === 0;
896
- return /* @__PURE__ */ jsxs13("div", { className: "pt-setup", children: [
897
- /* @__PURE__ */ jsx15("ul", { className: "pt-setup__list", children: requirements.map((requirement) => /* @__PURE__ */ jsxs13("li", { className: `pt-setup__item is-${requirement.status}`, children: [
898
- /* @__PURE__ */ jsx15("span", { className: "pt-setup__mark", "aria-hidden": "true" }),
899
- /* @__PURE__ */ jsxs13("div", { className: "pt-setup__main", children: [
900
- /* @__PURE__ */ jsxs13("p", { className: "pt-setup__label", children: [
943
+ return /* @__PURE__ */ jsxs14("div", { className: "pt-setup", children: [
944
+ /* @__PURE__ */ jsx16("ul", { className: "pt-setup__list", children: requirements.map((requirement) => /* @__PURE__ */ jsxs14("li", { className: `pt-setup__item is-${requirement.status}`, children: [
945
+ /* @__PURE__ */ jsx16("span", { className: "pt-setup__mark", "aria-hidden": "true" }),
946
+ /* @__PURE__ */ jsxs14("div", { className: "pt-setup__main", children: [
947
+ /* @__PURE__ */ jsxs14("p", { className: "pt-setup__label", children: [
901
948
  requirement.label,
902
- /* @__PURE__ */ jsx15("span", { className: "pt-setup__state", children: text2[requirement.status] })
949
+ /* @__PURE__ */ jsx16("span", { className: "pt-setup__state", children: text2[requirement.status] })
903
950
  ] }),
904
- requirement.variable && /* @__PURE__ */ jsx15("p", { className: "pt-setup__var", children: requirement.variable }),
905
- requirement.enables && /* @__PURE__ */ jsx15("p", { className: "pt-setup__enables", children: requirement.enables }),
906
- requirement.status !== "ok" && requirement.fix && /* @__PURE__ */ jsxs13("div", { className: "pt-setup__fix", children: [
907
- /* @__PURE__ */ jsx15("p", { className: "pt-setup__fix-title", children: text2.whatToDo }),
951
+ requirement.variable && /* @__PURE__ */ jsx16("p", { className: "pt-setup__var", children: requirement.variable }),
952
+ requirement.enables && /* @__PURE__ */ jsx16("p", { className: "pt-setup__enables", children: requirement.enables }),
953
+ requirement.status !== "ok" && requirement.fix && /* @__PURE__ */ jsxs14("div", { className: "pt-setup__fix", children: [
954
+ /* @__PURE__ */ jsx16("p", { className: "pt-setup__fix-title", children: text2.whatToDo }),
908
955
  requirement.fix
909
956
  ] })
910
957
  ] })
911
958
  ] }, requirement.id)) }),
912
- allOk && readyMessage && /* @__PURE__ */ jsx15("p", { className: "pt-setup__ready", children: readyMessage })
959
+ allOk && readyMessage && /* @__PURE__ */ jsx16("p", { className: "pt-setup__ready", children: readyMessage })
913
960
  ] });
914
961
  }
915
962
 
@@ -940,7 +987,7 @@ function isFirstRun(board) {
940
987
  }
941
988
 
942
989
  // src/components/Setup/SetupWizard.tsx
943
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
990
+ import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
944
991
  function SetupWizard({ requirements, labels, onCheck, onClose }) {
945
992
  const step = wizardStep(requirements);
946
993
  const [checking, setChecking] = useState5(false);
@@ -963,37 +1010,37 @@ function SetupWizard({ requirements, labels, onCheck, onClose }) {
963
1010
  } catch {
964
1011
  }
965
1012
  }
966
- return /* @__PURE__ */ jsxs14("section", { className: "pt-wizard", "aria-labelledby": "pt-wizard-title", children: [
967
- /* @__PURE__ */ jsxs14("header", { className: "pt-wizard__head", children: [
968
- /* @__PURE__ */ jsx16("h2", { className: "pt-h2", id: "pt-wizard-title", children: labels.title }),
969
- step.current && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__progress", children: labels.progress(step.index, step.total) })
1013
+ return /* @__PURE__ */ jsxs15("section", { className: "pt-wizard", "aria-labelledby": "pt-wizard-title", children: [
1014
+ /* @__PURE__ */ jsxs15("header", { className: "pt-wizard__head", children: [
1015
+ /* @__PURE__ */ jsx17("h2", { className: "pt-h2", id: "pt-wizard-title", children: labels.title }),
1016
+ step.current && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__progress", children: labels.progress(step.index, step.total) })
970
1017
  ] }),
971
- step.current ? /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__step", children: [
972
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__now", children: labels.nowDo }),
973
- /* @__PURE__ */ jsx16("h3", { className: "pt-wizard__label", children: step.current.label }),
974
- step.current.variable && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__var", children: step.current.variable }),
975
- step.current.enables && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__enables", children: step.current.enables }),
976
- step.current.fix && /* @__PURE__ */ jsx16("div", { className: "pt-wizard__fix", children: step.current.fix }),
977
- /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__actions", children: [
978
- /* @__PURE__ */ jsx16("button", { type: "button", className: "pt-btn pt-btn--primary", onClick: check, disabled: checking, children: checking ? labels.checking : labels.check }),
979
- checked && !checking && /* @__PURE__ */ jsx16("p", { className: "pt-wizard__said", children: step.unknown ? labels.cannotTell : labels.stillMissing })
1018
+ step.current ? /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__step", children: [
1019
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__now", children: labels.nowDo }),
1020
+ /* @__PURE__ */ jsx17("h3", { className: "pt-wizard__label", children: step.current.label }),
1021
+ step.current.variable && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__var", children: step.current.variable }),
1022
+ step.current.enables && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__enables", children: step.current.enables }),
1023
+ step.current.fix && /* @__PURE__ */ jsx17("div", { className: "pt-wizard__fix", children: step.current.fix }),
1024
+ /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__actions", children: [
1025
+ /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-btn pt-btn--primary", onClick: check, disabled: checking, children: checking ? labels.checking : labels.check }),
1026
+ checked && !checking && /* @__PURE__ */ jsx17("p", { className: "pt-wizard__said", children: step.unknown ? labels.cannotTell : labels.stillMissing })
980
1027
  ] })
981
- ] }) : /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__step pt-wizard__step--done", children: [
982
- /* @__PURE__ */ jsx16("h3", { className: "pt-wizard__label", children: labels.readyTitle }),
983
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__enables", children: labels.readyBody }),
984
- /* @__PURE__ */ jsx16("ol", { className: "pt-wizard__verify", children: labels.verify.map((line) => /* @__PURE__ */ jsx16("li", { children: line }, line)) })
1028
+ ] }) : /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__step pt-wizard__step--done", children: [
1029
+ /* @__PURE__ */ jsx17("h3", { className: "pt-wizard__label", children: labels.readyTitle }),
1030
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__enables", children: labels.readyBody }),
1031
+ /* @__PURE__ */ jsx17("ol", { className: "pt-wizard__verify", children: labels.verify.map((line) => /* @__PURE__ */ jsx17("li", { children: line }, line)) })
985
1032
  ] }),
986
- step.done.length > 0 && /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__done", children: [
987
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__done-title", children: labels.doneTitle }),
988
- /* @__PURE__ */ jsx16("ul", { children: step.done.map((requirement) => /* @__PURE__ */ jsx16("li", { children: requirement.label }, requirement.id)) })
1033
+ step.done.length > 0 && /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__done", children: [
1034
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__done-title", children: labels.doneTitle }),
1035
+ /* @__PURE__ */ jsx17("ul", { children: step.done.map((requirement) => /* @__PURE__ */ jsx17("li", { children: requirement.label }, requirement.id)) })
989
1036
  ] }),
990
- /* @__PURE__ */ jsxs14("div", { className: "pt-wizard__stuck", children: [
991
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__done-title", children: labels.stuckTitle }),
992
- /* @__PURE__ */ jsx16("p", { className: "pt-wizard__enables", children: labels.stuckBody }),
993
- /* @__PURE__ */ jsx16("pre", { className: "pt-wizard__prompt", children: labels.stuckPrompt }),
994
- /* @__PURE__ */ jsx16("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: copyPrompt, children: copied ? labels.copied : labels.copy })
1037
+ /* @__PURE__ */ jsxs15("div", { className: "pt-wizard__stuck", children: [
1038
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__done-title", children: labels.stuckTitle }),
1039
+ /* @__PURE__ */ jsx17("p", { className: "pt-wizard__enables", children: labels.stuckBody }),
1040
+ /* @__PURE__ */ jsx17("pre", { className: "pt-wizard__prompt", children: labels.stuckPrompt }),
1041
+ /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: copyPrompt, children: copied ? labels.copied : labels.copy })
995
1042
  ] }),
996
- 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 }) })
1043
+ 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 }) })
997
1044
  ] });
998
1045
  }
999
1046
 
@@ -1148,6 +1195,18 @@ function emptyCard(column, area) {
1148
1195
  completedAt: null
1149
1196
  };
1150
1197
  }
1198
+ var ARCHIVE_AFTER_DAYS = 7;
1199
+ function daysBefore(from, days) {
1200
+ const at = /* @__PURE__ */ new Date(`${from}T00:00:00Z`);
1201
+ at.setUTCDate(at.getUTCDate() - days);
1202
+ return at.toISOString().slice(0, 10);
1203
+ }
1204
+ function isArchived(card, doneColumns, now = today(), afterDays = ARCHIVE_AFTER_DAYS) {
1205
+ if (!doneColumns.has(card.column)) return false;
1206
+ const finished = card.completedAt;
1207
+ if (typeof finished !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(finished)) return false;
1208
+ return finished < daysBefore(now, afterDays);
1209
+ }
1151
1210
  function stampForColumn(card, columns) {
1152
1211
  const column = columns.find((candidate) => candidate.id === card.column);
1153
1212
  if (!column) return card;
@@ -1579,12 +1638,19 @@ var UI = {
1579
1638
  filterForClaude: "For Claude",
1580
1639
  filterYours: "Waiting on you",
1581
1640
  filterHighRisk: "High risk",
1641
+ situationBlocking: "What is waiting on you",
1642
+ situationClear: "Nothing is waiting on you. Every open card is either being worked or is Claude\u2019s to pick up.",
1643
+ situationStatus: "System",
1644
+ situationYoursHint: "Yours to finish \u2014 Claude will not touch these",
1645
+ situationDecisionsHint: "Questions nobody has answered yet",
1646
+ situationOrdersHint: "Asked for \u2014 waiting on Claude",
1582
1647
  statOpen: "Open",
1583
1648
  statOrders: "Orders",
1584
1649
  statYours: "For you",
1585
1650
  statDecisions: "Decisions",
1586
1651
  statHighRisk: "High risk",
1587
1652
  statDone: "Done",
1653
+ statArchived: "Archived",
1588
1654
  theme: "Theme",
1589
1655
  themeSubtitle: "the only thing that changes between projects",
1590
1656
  themeNote: "The structure does not move: only the palette handed to the theme provider changes.",
@@ -1615,6 +1681,10 @@ var UI = {
1615
1681
  needTokenEnables: "Lets Save commit the board back to the repository. Without it everything else works and Save fails.",
1616
1682
  needRepo: "The repository to write to",
1617
1683
  needRepoEnables: "Which repository the board is committed to. There is no default on purpose: writing to the wrong one is worse than not writing.",
1684
+ archiveTitle: "Archive",
1685
+ archiveHeading: "Finished, and out of the way",
1686
+ 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.",
1687
+ archiveFinished: (date) => `Finished ${date}`,
1618
1688
  needGate: "The gate this project copied",
1619
1689
  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.",
1620
1690
  fixGate: "The gate is older than the installed kit. See what changed before replacing anything:",
@@ -1903,12 +1973,19 @@ var UI = {
1903
1973
  filterForClaude: "Para Claude",
1904
1974
  filterYours: "Depende de ti",
1905
1975
  filterHighRisk: "Riesgo alto",
1976
+ situationBlocking: "Lo que te bloquea a ti",
1977
+ situationClear: "Nada espera por ti. Cada tarjeta abierta o est\xE1 en marcha o le toca a Claude.",
1978
+ situationStatus: "Sistema",
1979
+ situationYoursHint: "Tuyas para terminar: Claude no las toca",
1980
+ situationDecisionsHint: "Preguntas que nadie ha contestado todav\xEDa",
1981
+ situationOrdersHint: "Pedidas: esperando a Claude",
1906
1982
  statOpen: "Abiertas",
1907
1983
  statOrders: "\xD3rdenes",
1908
1984
  statYours: "Para ti",
1909
1985
  statDecisions: "Decisiones",
1910
1986
  statHighRisk: "Riesgo alto",
1911
1987
  statDone: "Hecho",
1988
+ statArchived: "Archivadas",
1912
1989
  theme: "Tema",
1913
1990
  themeSubtitle: "lo \xFAnico que cambia entre proyectos",
1914
1991
  themeNote: "La estructura no se mueve: cambia solo la paleta que recibe el proveedor de tema.",
@@ -1939,6 +2016,10 @@ var UI = {
1939
2016
  needTokenEnables: "Permite que Guardar confirme el tablero en el repositorio. Sin \xE9l todo lo dem\xE1s funciona y Guardar falla.",
1940
2017
  needRepo: "El repositorio donde escribir",
1941
2018
  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.",
2019
+ archiveTitle: "Archivo",
2020
+ archiveHeading: "Terminadas, y fuera de en medio",
2021
+ 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.",
2022
+ archiveFinished: (date) => `Terminada el ${date}`,
1942
2023
  needGate: "La puerta que copi\xF3 este proyecto",
1943
2024
  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.",
1944
2025
  fixGate: "La puerta es m\xE1s vieja que el kit instalado. Mira qu\xE9 cambi\xF3 antes de reemplazar nada:",
@@ -2159,7 +2240,7 @@ var UI = {
2159
2240
  };
2160
2241
 
2161
2242
  // src/panel/AnalysisView.tsx
2162
- import { Fragment as Fragment3, jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
2243
+ import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2163
2244
  var SUGGESTION_STATUSES = ["new", "doing", "done", "dismissed"];
2164
2245
  function MetricTile({ metric, lang, ui }) {
2165
2246
  const { latest, delta, against } = trendOf(metric);
@@ -2168,23 +2249,23 @@ function MetricTile({ metric, lang, ui }) {
2168
2249
  const height = 34;
2169
2250
  const path = points.map((point) => `${(point.x * width).toFixed(1)},${(point.y * (height - 6) + 3).toFixed(1)}`);
2170
2251
  const last = points[points.length - 1];
2171
- return /* @__PURE__ */ jsxs15("article", { className: "pt-metric", children: [
2172
- /* @__PURE__ */ jsx17("p", { className: "pt-metric__label", children: text(metric.label, lang) }),
2173
- /* @__PURE__ */ jsxs15("p", { className: "pt-metric__value", children: [
2252
+ return /* @__PURE__ */ jsxs16("article", { className: "pt-metric", children: [
2253
+ /* @__PURE__ */ jsx18("p", { className: "pt-metric__label", children: text(metric.label, lang) }),
2254
+ /* @__PURE__ */ jsxs16("p", { className: "pt-metric__value", children: [
2174
2255
  latest ? latest.value : "\u2014",
2175
- /* @__PURE__ */ jsx17("span", { className: "pt-metric__unit", children: metric.unit })
2256
+ /* @__PURE__ */ jsx18("span", { className: "pt-metric__unit", children: metric.unit })
2176
2257
  ] }),
2177
- delta !== null && /* @__PURE__ */ jsxs15("p", { className: `pt-metric__delta${against ? " is-against" : " is-with"}`, children: [
2258
+ delta !== null && /* @__PURE__ */ jsxs16("p", { className: `pt-metric__delta${against ? " is-against" : " is-with"}`, children: [
2178
2259
  delta > 0 ? "\u25B2" : delta < 0 ? "\u25BC" : "\u25A0",
2179
2260
  " ",
2180
2261
  delta > 0 ? "+" : "",
2181
2262
  delta,
2182
- /* @__PURE__ */ jsxs15("span", { className: "pt-metric__since", children: [
2263
+ /* @__PURE__ */ jsxs16("span", { className: "pt-metric__since", children: [
2183
2264
  " \xB7 ",
2184
2265
  against ? ui.metricAgainst : ui.metricWith
2185
2266
  ] })
2186
2267
  ] }),
2187
- points.length > 1 && /* @__PURE__ */ jsxs15(
2268
+ points.length > 1 && /* @__PURE__ */ jsxs16(
2188
2269
  "svg",
2189
2270
  {
2190
2271
  className: "pt-metric__spark",
@@ -2194,12 +2275,12 @@ function MetricTile({ metric, lang, ui }) {
2194
2275
  role: "img",
2195
2276
  "aria-label": `${text(metric.label, lang)}: ${metric.readings.map((r) => `${r.date} ${r.value}`).join(", ")}`,
2196
2277
  children: [
2197
- /* @__PURE__ */ jsx17("polyline", { points: path.join(" "), fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }),
2198
- last && /* @__PURE__ */ jsx17("circle", { cx: last.x * width, cy: last.y * (height - 6) + 3, r: "3.5", className: "pt-metric__point" })
2278
+ /* @__PURE__ */ jsx18("polyline", { points: path.join(" "), fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }),
2279
+ last && /* @__PURE__ */ jsx18("circle", { cx: last.x * width, cy: last.y * (height - 6) + 3, r: "3.5", className: "pt-metric__point" })
2199
2280
  ]
2200
2281
  }
2201
2282
  ),
2202
- latest?.note && /* @__PURE__ */ jsx17("p", { className: "pt-metric__note", children: text(latest.note, lang) })
2283
+ latest?.note && /* @__PURE__ */ jsx18("p", { className: "pt-metric__note", children: text(latest.note, lang) })
2203
2284
  ] });
2204
2285
  }
2205
2286
  function ChoiceCard({
@@ -2210,11 +2291,11 @@ function ChoiceCard({
2210
2291
  onDecide
2211
2292
  }) {
2212
2293
  const answered = choice.options.find((option) => option.id === choice.value);
2213
- return /* @__PURE__ */ jsxs15("article", { className: `pt-choice${answered ? " is-decided" : ""}`, children: [
2214
- /* @__PURE__ */ jsx17("p", { className: "pt-choice__state", children: answered ? ui.choiceDecidedAt(choice.decidedAt ?? "") : ui.choiceOpen }),
2215
- /* @__PURE__ */ jsx17("p", { className: "pt-choice__question", children: text(choice.question, lang) }),
2216
- choice.why && /* @__PURE__ */ jsx17("p", { className: "pt-choice__why", children: text(choice.why, lang) }),
2217
- /* @__PURE__ */ jsx17("div", { className: "pt-panel-row pt-choice__options", children: choice.options.map((option) => /* @__PURE__ */ jsx17(
2294
+ return /* @__PURE__ */ jsxs16("article", { className: `pt-choice${answered ? " is-decided" : ""}`, children: [
2295
+ /* @__PURE__ */ jsx18("p", { className: "pt-choice__state", children: answered ? ui.choiceDecidedAt(choice.decidedAt ?? "") : ui.choiceOpen }),
2296
+ /* @__PURE__ */ jsx18("p", { className: "pt-choice__question", children: text(choice.question, lang) }),
2297
+ choice.why && /* @__PURE__ */ jsx18("p", { className: "pt-choice__why", children: text(choice.why, lang) }),
2298
+ /* @__PURE__ */ jsx18("div", { className: "pt-panel-row pt-choice__options", children: choice.options.map((option) => /* @__PURE__ */ jsx18(
2218
2299
  FilterChip,
2219
2300
  {
2220
2301
  label: text(option.label, lang),
@@ -2223,8 +2304,8 @@ function ChoiceCard({
2223
2304
  },
2224
2305
  option.id
2225
2306
  )) }),
2226
- answered?.detail && /* @__PURE__ */ jsx17("p", { className: "pt-choice__detail", children: text(answered.detail, lang) }),
2227
- answered && /* @__PURE__ */ jsx17(
2307
+ answered?.detail && /* @__PURE__ */ jsx18("p", { className: "pt-choice__detail", children: text(answered.detail, lang) }),
2308
+ answered && /* @__PURE__ */ jsx18(
2228
2309
  "button",
2229
2310
  {
2230
2311
  type: "button",
@@ -2243,10 +2324,10 @@ function Choices({
2243
2324
  onDecide
2244
2325
  }) {
2245
2326
  const choices = analysis.choices?.[section] ?? [];
2246
- return /* @__PURE__ */ jsxs15("section", { children: [
2247
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.choicesTitle }),
2248
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.choicesIntro }),
2249
- 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(
2327
+ return /* @__PURE__ */ jsxs16("section", { children: [
2328
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.choicesTitle }),
2329
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.choicesIntro }),
2330
+ 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(
2250
2331
  ChoiceCard,
2251
2332
  {
2252
2333
  section,
@@ -2280,17 +2361,17 @@ function AnalysisView({
2280
2361
  const total = answers.length + open.length;
2281
2362
  const here = analysis.choices?.[section] ?? [];
2282
2363
  const answeredHere = here.filter((choice) => choice.options.some((option) => option.id === choice.value)).length;
2283
- return /* @__PURE__ */ jsxs15("div", { className: "pt-panel-page pt-panel-section pt-analysis", children: [
2284
- /* @__PURE__ */ jsxs15("section", { children: [
2285
- /* @__PURE__ */ jsx17("p", { className: "pt-eyebrow", children: ui.analysisEyebrow }),
2286
- /* @__PURE__ */ jsx17("h2", { className: "pt-h2", children: ui.analysisSections[section] }),
2287
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.analysisSectionHints[section] }),
2288
- 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 }) }),
2289
- /* @__PURE__ */ jsx17("nav", { className: "pt-analysis__nav", "aria-label": ui.analysis, children: ANALYSIS_SECTIONS.map((id) => {
2364
+ return /* @__PURE__ */ jsxs16("div", { className: "pt-panel-page pt-panel-section pt-analysis", children: [
2365
+ /* @__PURE__ */ jsxs16("section", { children: [
2366
+ /* @__PURE__ */ jsx18("p", { className: "pt-eyebrow", children: ui.analysisEyebrow }),
2367
+ /* @__PURE__ */ jsx18("h2", { className: "pt-h2", children: ui.analysisSections[section] }),
2368
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.analysisSectionHints[section] }),
2369
+ 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 }) }),
2370
+ /* @__PURE__ */ jsx18("nav", { className: "pt-analysis__nav", "aria-label": ui.analysis, children: ANALYSIS_SECTIONS.map((id) => {
2290
2371
  const count = (analysis.choices?.[id] ?? []).filter(
2291
2372
  (choice) => !choice.options.some((option) => option.id === choice.value)
2292
2373
  ).length;
2293
- return /* @__PURE__ */ jsxs15(
2374
+ return /* @__PURE__ */ jsxs16(
2294
2375
  "button",
2295
2376
  {
2296
2377
  type: "button",
@@ -2299,110 +2380,110 @@ function AnalysisView({
2299
2380
  onClick: () => setSection(id),
2300
2381
  children: [
2301
2382
  ui.analysisSections[id],
2302
- count > 0 && /* @__PURE__ */ jsx17("span", { className: "pt-analysis__open", "aria-hidden": "true", children: count })
2383
+ count > 0 && /* @__PURE__ */ jsx18("span", { className: "pt-analysis__open", "aria-hidden": "true", children: count })
2303
2384
  ]
2304
2385
  },
2305
2386
  id
2306
2387
  );
2307
2388
  }) }),
2308
- here.length > 0 && /* @__PURE__ */ jsxs15("p", { className: "pt-analysis__stage", children: [
2389
+ here.length > 0 && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
2309
2390
  ui.analysisAnswered(answeredHere, here.length),
2310
- answeredHere === here.length && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2391
+ answeredHere === here.length && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2311
2392
  " \xB7 ",
2312
2393
  ui.analysisAllDecided
2313
2394
  ] })
2314
2395
  ] })
2315
2396
  ] }),
2316
- section === "board" && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2317
- /* @__PURE__ */ jsxs15("section", { children: [
2318
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.boardFactsTitle }),
2319
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.boardFactsIntro }),
2320
- /* @__PURE__ */ jsx17("div", { className: "pt-fact-grid", children: [
2397
+ section === "board" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2398
+ /* @__PURE__ */ jsxs16("section", { children: [
2399
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.boardFactsTitle }),
2400
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.boardFactsIntro }),
2401
+ /* @__PURE__ */ jsx18("div", { className: "pt-fact-grid", children: [
2321
2402
  [ui.factOpen, String(facts.open)],
2322
2403
  [ui.factWaiting, String(facts.waitingOnOwner)],
2323
2404
  [ui.factOrders, String(facts.orders)],
2324
2405
  [ui.factHighRisk, String(facts.highRisk)]
2325
- ].map(([label, value]) => /* @__PURE__ */ jsxs15("article", { className: "pt-fact", children: [
2326
- /* @__PURE__ */ jsx17("p", { className: "pt-fact__label", children: label }),
2327
- /* @__PURE__ */ jsx17("p", { className: "pt-fact__value", children: value })
2406
+ ].map(([label, value]) => /* @__PURE__ */ jsxs16("article", { className: "pt-fact", children: [
2407
+ /* @__PURE__ */ jsx18("p", { className: "pt-fact__label", children: label }),
2408
+ /* @__PURE__ */ jsx18("p", { className: "pt-fact__value", children: value })
2328
2409
  ] }, label)) }),
2329
- /* @__PURE__ */ jsx17("h4", { className: "pt-analysis__minor", children: ui.factColumnsTitle }),
2330
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: facts.byColumn.map((column) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal", children: [
2331
- /* @__PURE__ */ jsx17("span", { children: t(column.title) }),
2332
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: column.count })
2410
+ /* @__PURE__ */ jsx18("h4", { className: "pt-analysis__minor", children: ui.factColumnsTitle }),
2411
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: facts.byColumn.map((column) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal", children: [
2412
+ /* @__PURE__ */ jsx18("span", { children: t(column.title) }),
2413
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: column.count })
2333
2414
  ] }, column.id)) }),
2334
- facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */ jsxs15("p", { className: "pt-analysis__stage", children: [
2415
+ facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
2335
2416
  ui.factOldest,
2336
2417
  ": ",
2337
- /* @__PURE__ */ jsx17("strong", { children: ui.factDays(facts.oldestOpenDays) }),
2418
+ /* @__PURE__ */ jsx18("strong", { children: ui.factDays(facts.oldestOpenDays) }),
2338
2419
  " \xB7 ",
2339
2420
  t(facts.oldestOpen.title)
2340
2421
  ] })
2341
2422
  ] }),
2342
- /* @__PURE__ */ jsxs15("section", { children: [
2343
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.factClaimedTitle }),
2344
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.factClaimedIntro }),
2345
- 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: [
2346
- /* @__PURE__ */ jsx17("button", { type: "button", className: "pt-analysis__link", onClick: () => onOpenCard?.(card.id), children: t(card.title) || ui.untitled }),
2347
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: ui.neverStarted })
2423
+ /* @__PURE__ */ jsxs16("section", { children: [
2424
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.factClaimedTitle }),
2425
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.factClaimedIntro }),
2426
+ 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: [
2427
+ /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-analysis__link", onClick: () => onOpenCard?.(card.id), children: t(card.title) || ui.untitled }),
2428
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.neverStarted })
2348
2429
  ] }, card.id)) })
2349
2430
  ] })
2350
2431
  ] }),
2351
- section === "project" && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2352
- /* @__PURE__ */ jsxs15("section", { children: [
2353
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.briefTitle }),
2354
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: t(analysis.brief) }),
2355
- /* @__PURE__ */ jsxs15("p", { className: "pt-analysis__stage", children: [
2432
+ section === "project" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2433
+ /* @__PURE__ */ jsxs16("section", { children: [
2434
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.briefTitle }),
2435
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: t(analysis.brief) }),
2436
+ /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
2356
2437
  ui.stage,
2357
2438
  ": ",
2358
- /* @__PURE__ */ jsx17("strong", { children: analysis.stage })
2439
+ /* @__PURE__ */ jsx18("strong", { children: analysis.stage })
2359
2440
  ] })
2360
2441
  ] }),
2361
- /* @__PURE__ */ jsxs15("section", { className: "pt-analysis__split", children: [
2362
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2363
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.goalsTitle }),
2364
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: analysis.goals.map((goal) => /* @__PURE__ */ jsxs15("li", { className: `pt-analysis__goal is-${goal.weight}`, children: [
2365
- /* @__PURE__ */ jsx17("span", { children: t(goal.label) }),
2366
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: ui.weights[goal.weight] })
2442
+ /* @__PURE__ */ jsxs16("section", { className: "pt-analysis__split", children: [
2443
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2444
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.goalsTitle }),
2445
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: analysis.goals.map((goal) => /* @__PURE__ */ jsxs16("li", { className: `pt-analysis__goal is-${goal.weight}`, children: [
2446
+ /* @__PURE__ */ jsx18("span", { children: t(goal.label) }),
2447
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.weights[goal.weight] })
2367
2448
  ] }, goal.id)) })
2368
2449
  ] }),
2369
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2370
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.constraintsTitle }),
2371
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__list", children: analysis.constraints.map((constraint) => /* @__PURE__ */ jsxs15("li", { className: `pt-analysis__goal${constraint.on ? "" : " is-off"}`, children: [
2372
- /* @__PURE__ */ jsx17("span", { children: t(constraint.label) }),
2373
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: constraint.on ? ui.constraintOn : ui.constraintOff })
2450
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2451
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.constraintsTitle }),
2452
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__list", children: analysis.constraints.map((constraint) => /* @__PURE__ */ jsxs16("li", { className: `pt-analysis__goal${constraint.on ? "" : " is-off"}`, children: [
2453
+ /* @__PURE__ */ jsx18("span", { children: t(constraint.label) }),
2454
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: constraint.on ? ui.constraintOn : ui.constraintOff })
2374
2455
  ] }, constraint.id)) })
2375
2456
  ] })
2376
2457
  ] }),
2377
- /* @__PURE__ */ jsxs15("section", { children: [
2378
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.metricsTitle }),
2379
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.metricsIntro }),
2380
- /* @__PURE__ */ jsx17("div", { className: "pt-metric-grid", children: analysis.metrics.map((metric) => /* @__PURE__ */ jsx17(MetricTile, { metric, lang, ui }, metric.id)) })
2458
+ /* @__PURE__ */ jsxs16("section", { children: [
2459
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.metricsTitle }),
2460
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.metricsIntro }),
2461
+ /* @__PURE__ */ jsx18("div", { className: "pt-metric-grid", children: analysis.metrics.map((metric) => /* @__PURE__ */ jsx18(MetricTile, { metric, lang, ui }, metric.id)) })
2381
2462
  ] })
2382
2463
  ] }),
2383
- section === "strategy" && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2384
- /* @__PURE__ */ jsxs15("section", { children: [
2385
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.strategiesTitle }),
2386
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: analysis.chosen ? ui.strategyChosenHint : ui.strategyOpenHint }),
2387
- /* @__PURE__ */ jsx17("div", { className: "pt-strategy-grid", children: analysis.strategies.map((strategy) => {
2464
+ section === "strategy" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2465
+ /* @__PURE__ */ jsxs16("section", { children: [
2466
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.strategiesTitle }),
2467
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: analysis.chosen ? ui.strategyChosenHint : ui.strategyOpenHint }),
2468
+ /* @__PURE__ */ jsx18("div", { className: "pt-strategy-grid", children: analysis.strategies.map((strategy) => {
2388
2469
  const chosen = analysis.chosen === strategy.id;
2389
- return /* @__PURE__ */ jsxs15("article", { className: `pt-strategy pt-hud${chosen ? " is-chosen" : ""}`, children: [
2390
- /* @__PURE__ */ jsx17("h4", { className: "pt-strategy__title", children: t(strategy.title) }),
2391
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(strategy.thesis) }),
2392
- /* @__PURE__ */ jsx17("dl", { className: "pt-strategy__meters", children: [
2470
+ return /* @__PURE__ */ jsxs16("article", { className: `pt-strategy pt-hud${chosen ? " is-chosen" : ""}`, children: [
2471
+ /* @__PURE__ */ jsx18("h4", { className: "pt-strategy__title", children: t(strategy.title) }),
2472
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(strategy.thesis) }),
2473
+ /* @__PURE__ */ jsx18("dl", { className: "pt-strategy__meters", children: [
2393
2474
  [ui.effort, strategy.effort],
2394
2475
  [ui.riskShort, strategy.risk],
2395
2476
  [ui.upside, strategy.upside]
2396
- ].map(([label, value]) => /* @__PURE__ */ jsxs15("div", { children: [
2397
- /* @__PURE__ */ jsx17("dt", { children: label }),
2398
- /* @__PURE__ */ jsxs15("dd", { children: [
2399
- /* @__PURE__ */ jsx17("span", { className: "pt-strategy__track", children: /* @__PURE__ */ jsx17("span", { className: "pt-strategy__fill", style: { width: `${value * 10}%` } }) }),
2400
- /* @__PURE__ */ jsx17("b", { children: value })
2477
+ ].map(([label, value]) => /* @__PURE__ */ jsxs16("div", { children: [
2478
+ /* @__PURE__ */ jsx18("dt", { children: label }),
2479
+ /* @__PURE__ */ jsxs16("dd", { children: [
2480
+ /* @__PURE__ */ jsx18("span", { className: "pt-strategy__track", children: /* @__PURE__ */ jsx18("span", { className: "pt-strategy__fill", style: { width: `${value * 10}%` } }) }),
2481
+ /* @__PURE__ */ jsx18("b", { children: value })
2401
2482
  ] })
2402
2483
  ] }, label)) }),
2403
- /* @__PURE__ */ jsx17("p", { className: "pt-strategy__horizon", children: t(strategy.horizon) }),
2404
- /* @__PURE__ */ jsx17("ul", { className: "pt-cap__list", children: strategy.moves.map((move) => /* @__PURE__ */ jsx17("li", { children: t(move) }, t(move))) }),
2405
- /* @__PURE__ */ jsx17(
2484
+ /* @__PURE__ */ jsx18("p", { className: "pt-strategy__horizon", children: t(strategy.horizon) }),
2485
+ /* @__PURE__ */ jsx18("ul", { className: "pt-cap__list", children: strategy.moves.map((move) => /* @__PURE__ */ jsx18("li", { children: t(move) }, t(move))) }),
2486
+ /* @__PURE__ */ jsx18(
2406
2487
  FilterChip,
2407
2488
  {
2408
2489
  label: chosen ? ui.strategyChosen : ui.strategyChoose,
@@ -2413,19 +2494,19 @@ function AnalysisView({
2413
2494
  ] }, strategy.id);
2414
2495
  }) })
2415
2496
  ] }),
2416
- /* @__PURE__ */ jsxs15("section", { children: [
2417
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.suggestionsTitle }),
2418
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.suggestionsIntro }),
2419
- /* @__PURE__ */ jsx17("ul", { className: "pt-analysis__suggestions", children: analysis.suggestions.map((suggestion) => /* @__PURE__ */ jsxs15("li", { className: `pt-suggestion pt-hud is-${suggestion.severity}`, children: [
2420
- /* @__PURE__ */ jsxs15("p", { className: "pt-suggestion__meta", children: [
2497
+ /* @__PURE__ */ jsxs16("section", { children: [
2498
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.suggestionsTitle }),
2499
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.suggestionsIntro }),
2500
+ /* @__PURE__ */ jsx18("ul", { className: "pt-analysis__suggestions", children: analysis.suggestions.map((suggestion) => /* @__PURE__ */ jsxs16("li", { className: `pt-suggestion pt-hud is-${suggestion.severity}`, children: [
2501
+ /* @__PURE__ */ jsxs16("p", { className: "pt-suggestion__meta", children: [
2421
2502
  suggestion.area,
2422
2503
  " \xB7 ",
2423
2504
  ui.severities[suggestion.severity],
2424
2505
  " \xB7 ",
2425
2506
  suggestion.date
2426
2507
  ] }),
2427
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(suggestion.text) }),
2428
- /* @__PURE__ */ jsx17("div", { className: "pt-panel-row", children: SUGGESTION_STATUSES.map((status) => /* @__PURE__ */ jsx17(
2508
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(suggestion.text) }),
2509
+ /* @__PURE__ */ jsx18("div", { className: "pt-panel-row", children: SUGGESTION_STATUSES.map((status) => /* @__PURE__ */ jsx18(
2429
2510
  FilterChip,
2430
2511
  {
2431
2512
  label: ui.suggestionStatuses[status],
@@ -2437,67 +2518,67 @@ function AnalysisView({
2437
2518
  ] }, suggestion.id)) })
2438
2519
  ] })
2439
2520
  ] }),
2440
- section === "market" && /* @__PURE__ */ jsx17("section", { children: analysis.market ? /* @__PURE__ */ jsxs15(Fragment3, { children: [
2441
- /* @__PURE__ */ jsxs15("div", { className: "pt-analysis__split", children: [
2442
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2443
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.audienceTitle }),
2444
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(analysis.market.audience) })
2521
+ section === "market" && /* @__PURE__ */ jsx18("section", { children: analysis.market ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
2522
+ /* @__PURE__ */ jsxs16("div", { className: "pt-analysis__split", children: [
2523
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2524
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.audienceTitle }),
2525
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(analysis.market.audience) })
2445
2526
  ] }),
2446
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2447
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.positioningTitle }),
2448
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(analysis.market.positioning) })
2527
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2528
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.positioningTitle }),
2529
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(analysis.market.positioning) })
2449
2530
  ] })
2450
2531
  ] }),
2451
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.competitorsTitle }),
2452
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.marketIntro }),
2453
- /* @__PURE__ */ jsx17("div", { className: "pt-rival-grid", children: analysis.market.competitors.map((rival) => /* @__PURE__ */ jsxs15("article", { className: "pt-rival pt-hud", children: [
2454
- /* @__PURE__ */ jsx17("h4", { className: "pt-rival__name", children: rival.name }),
2455
- /* @__PURE__ */ jsxs15("p", { className: "pt-rival__line", children: [
2456
- /* @__PURE__ */ jsx17("span", { className: "pt-rival__tag", children: ui.competitorStrength }),
2532
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.competitorsTitle }),
2533
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.marketIntro }),
2534
+ /* @__PURE__ */ jsx18("div", { className: "pt-rival-grid", children: analysis.market.competitors.map((rival) => /* @__PURE__ */ jsxs16("article", { className: "pt-rival pt-hud", children: [
2535
+ /* @__PURE__ */ jsx18("h4", { className: "pt-rival__name", children: rival.name }),
2536
+ /* @__PURE__ */ jsxs16("p", { className: "pt-rival__line", children: [
2537
+ /* @__PURE__ */ jsx18("span", { className: "pt-rival__tag", children: ui.competitorStrength }),
2457
2538
  t(rival.strength)
2458
2539
  ] }),
2459
- /* @__PURE__ */ jsxs15("p", { className: "pt-rival__line is-gap", children: [
2460
- /* @__PURE__ */ jsx17("span", { className: "pt-rival__tag", children: ui.competitorGap }),
2540
+ /* @__PURE__ */ jsxs16("p", { className: "pt-rival__line is-gap", children: [
2541
+ /* @__PURE__ */ jsx18("span", { className: "pt-rival__tag", children: ui.competitorGap }),
2461
2542
  t(rival.gap)
2462
2543
  ] })
2463
2544
  ] }, rival.id)) }),
2464
- analysis.market.pricing && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2465
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.pricingTitle }),
2466
- /* @__PURE__ */ jsx17("p", { className: "pt-panel-text", children: t(analysis.market.pricing) })
2545
+ analysis.market.pricing && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2546
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.pricingTitle }),
2547
+ /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: t(analysis.market.pricing) })
2467
2548
  ] }),
2468
- analysis.market.notes && analysis.market.notes.length > 0 && /* @__PURE__ */ jsxs15(Fragment3, { children: [
2469
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.marketNotesTitle }),
2470
- /* @__PURE__ */ jsx17("ul", { className: "pt-cap__list", children: analysis.market.notes.map((note) => /* @__PURE__ */ jsx17("li", { children: t(note) }, t(note))) })
2549
+ analysis.market.notes && analysis.market.notes.length > 0 && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2550
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title pt-analysis__minor", children: ui.marketNotesTitle }),
2551
+ /* @__PURE__ */ jsx18("ul", { className: "pt-cap__list", children: analysis.market.notes.map((note) => /* @__PURE__ */ jsx18("li", { children: t(note) }, t(note))) })
2471
2552
  ] })
2472
- ] }) : /* @__PURE__ */ jsx17("p", { className: "pt-analysis__empty", children: ui.marketEmpty }) }),
2473
- /* @__PURE__ */ jsx17(Choices, { section, analysis, lang, ui, onDecide }),
2474
- total > 0 && /* @__PURE__ */ jsxs15("section", { className: "pt-analysis__split", children: [
2475
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2476
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.claudeReadsTitle }),
2477
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.claudeReadsIntro }),
2478
- /* @__PURE__ */ jsxs15("ul", { className: "pt-analysis__list", children: [
2479
- answers.map(({ section: from, choice, option }) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal is-primary", children: [
2480
- /* @__PURE__ */ jsxs15("span", { children: [
2481
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2553
+ ] }) : /* @__PURE__ */ jsx18("p", { className: "pt-analysis__empty", children: ui.marketEmpty }) }),
2554
+ /* @__PURE__ */ jsx18(Choices, { section, analysis, lang, ui, onDecide }),
2555
+ total > 0 && /* @__PURE__ */ jsxs16("section", { className: "pt-analysis__split", children: [
2556
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2557
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.claudeReadsTitle }),
2558
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.claudeReadsIntro }),
2559
+ /* @__PURE__ */ jsxs16("ul", { className: "pt-analysis__list", children: [
2560
+ answers.map(({ section: from, choice, option }) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal is-primary", children: [
2561
+ /* @__PURE__ */ jsxs16("span", { children: [
2562
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2482
2563
  t(choice.question)
2483
2564
  ] }),
2484
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: t(option.label) })
2565
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: t(option.label) })
2485
2566
  ] }, choice.id)),
2486
- answers.length === 0 && /* @__PURE__ */ jsx17("li", { className: "pt-analysis__goal is-off", children: ui.choicesNone })
2567
+ answers.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.choicesNone })
2487
2568
  ] })
2488
2569
  ] }),
2489
- /* @__PURE__ */ jsxs15("div", { className: "pt-cap pt-hud", children: [
2490
- /* @__PURE__ */ jsx17("h3", { className: "pt-cap__title", children: ui.claudeOpenTitle }),
2491
- /* @__PURE__ */ jsx17("p", { className: "pt-sub", children: ui.claudeOpenIntro }),
2492
- /* @__PURE__ */ jsxs15("ul", { className: "pt-analysis__list", children: [
2493
- open.map(({ section: from, choice }) => /* @__PURE__ */ jsxs15("li", { className: "pt-analysis__goal", children: [
2494
- /* @__PURE__ */ jsxs15("button", { type: "button", className: "pt-analysis__link", onClick: () => setSection(from), children: [
2495
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2570
+ /* @__PURE__ */ jsxs16("div", { className: "pt-cap pt-hud", children: [
2571
+ /* @__PURE__ */ jsx18("h3", { className: "pt-cap__title", children: ui.claudeOpenTitle }),
2572
+ /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.claudeOpenIntro }),
2573
+ /* @__PURE__ */ jsxs16("ul", { className: "pt-analysis__list", children: [
2574
+ open.map(({ section: from, choice }) => /* @__PURE__ */ jsxs16("li", { className: "pt-analysis__goal", children: [
2575
+ /* @__PURE__ */ jsxs16("button", { type: "button", className: "pt-analysis__link", onClick: () => setSection(from), children: [
2576
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__from", children: ui.analysisSections[from] }),
2496
2577
  t(choice.question)
2497
2578
  ] }),
2498
- /* @__PURE__ */ jsx17("span", { className: "pt-analysis__weight", children: ui.choiceOpen })
2579
+ /* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.choiceOpen })
2499
2580
  ] }, choice.id)),
2500
- open.length === 0 && /* @__PURE__ */ jsx17("li", { className: "pt-analysis__goal is-off", children: ui.analysisAllDecided })
2581
+ open.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.analysisAllDecided })
2501
2582
  ] })
2502
2583
  ] })
2503
2584
  ] })
@@ -2548,39 +2629,39 @@ function ageInWords(seconds, lang) {
2548
2629
  }
2549
2630
 
2550
2631
  // src/panel/MarketplaceView.tsx
2551
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2632
+ import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2552
2633
  function ToolRow({
2553
2634
  tool,
2554
2635
  lang,
2555
2636
  ui,
2556
2637
  onInstall
2557
2638
  }) {
2558
- return /* @__PURE__ */ jsxs16("article", { className: `pt-tool${tool.state ? ` is-${tool.state}` : " is-command"}`, children: [
2559
- /* @__PURE__ */ jsxs16("div", { className: "pt-tool__head", children: [
2560
- /* @__PURE__ */ jsx18("h3", { className: "pt-tool__name", children: tool.name }),
2561
- /* @__PURE__ */ jsx18("span", { className: "pt-tool__state", children: tool.state ? ui.installStates[tool.state] : ui.toolCommandOnly })
2639
+ return /* @__PURE__ */ jsxs17("article", { className: `pt-tool${tool.state ? ` is-${tool.state}` : " is-command"}`, children: [
2640
+ /* @__PURE__ */ jsxs17("div", { className: "pt-tool__head", children: [
2641
+ /* @__PURE__ */ jsx19("h3", { className: "pt-tool__name", children: tool.name }),
2642
+ /* @__PURE__ */ jsx19("span", { className: "pt-tool__state", children: tool.state ? ui.installStates[tool.state] : ui.toolCommandOnly })
2562
2643
  ] }),
2563
- tool.summary && /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: tool.summary }),
2564
- /* @__PURE__ */ jsxs16("p", { className: "pt-tool__meta", children: [
2565
- /* @__PURE__ */ jsx18("span", { className: "pt-tool__id", children: tool.id }),
2566
- tool.claudePlugin && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2644
+ tool.summary && /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: tool.summary }),
2645
+ /* @__PURE__ */ jsxs17("p", { className: "pt-tool__meta", children: [
2646
+ /* @__PURE__ */ jsx19("span", { className: "pt-tool__id", children: tool.id }),
2647
+ tool.claudePlugin && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2567
2648
  " \xB7 ",
2568
- tool.version ? /* @__PURE__ */ jsxs16("span", { className: "pt-tool__version", children: [
2649
+ tool.version ? /* @__PURE__ */ jsxs17("span", { className: "pt-tool__version", children: [
2569
2650
  "v",
2570
2651
  tool.version
2571
2652
  ] }) : (
2572
2653
  // Never a version we made up. A blank here is the plugin's own
2573
2654
  // manifest failing to answer, and it says so on hover.
2574
- /* @__PURE__ */ jsx18("span", { className: "pt-tool__version is-unknown", title: tool.versionError ?? void 0, children: ui.versionUnknown })
2655
+ /* @__PURE__ */ jsx19("span", { className: "pt-tool__version is-unknown", title: tool.versionError ?? void 0, children: ui.versionUnknown })
2575
2656
  )
2576
2657
  ] }),
2577
- tool.repo && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2658
+ tool.repo && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2578
2659
  " \xB7 ",
2579
- /* @__PURE__ */ jsx18("a", { className: "pt-tool__repo", href: `https://github.com/${tool.repo}`, target: "_blank", rel: "noreferrer", children: tool.repo })
2660
+ /* @__PURE__ */ jsx19("a", { className: "pt-tool__repo", href: `https://github.com/${tool.repo}`, target: "_blank", rel: "noreferrer", children: tool.repo })
2580
2661
  ] })
2581
2662
  ] }),
2582
- 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)) }),
2583
- !tool.claudePlugin && tool.standaloneCommand && /* @__PURE__ */ jsx18(
2663
+ 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)) }),
2664
+ !tool.claudePlugin && tool.standaloneCommand && /* @__PURE__ */ jsx19(
2584
2665
  CopyBlock,
2585
2666
  {
2586
2667
  text: tool.standaloneCommand,
@@ -2588,11 +2669,11 @@ function ToolRow({
2588
2669
  labels: { copy: ui.copy, copied: ui.copied, selected: ui.copySelected }
2589
2670
  }
2590
2671
  ),
2591
- /* @__PURE__ */ jsxs16("div", { className: "pt-panel-row pt-tool__actions", children: [
2592
- /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => onInstall(tool), children: tool.claudePlugin ? ui.install : ui.howToRun }),
2593
- tool.homepage && /* @__PURE__ */ jsx18("a", { className: "pt-btn pt-btn--sm", href: tool.homepage, target: "_blank", rel: "noreferrer", children: ui.learnMore })
2672
+ /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row pt-tool__actions", children: [
2673
+ /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => onInstall(tool), children: tool.claudePlugin ? ui.install : ui.howToRun }),
2674
+ tool.homepage && /* @__PURE__ */ jsx19("a", { className: "pt-btn pt-btn--sm", href: tool.homepage, target: "_blank", rel: "noreferrer", children: ui.learnMore })
2594
2675
  ] }),
2595
- tool.state === "misconfigured" && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.stateMisconfiguredWhy })
2676
+ tool.state === "misconfigured" && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.stateMisconfiguredWhy })
2596
2677
  ] });
2597
2678
  }
2598
2679
  function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
@@ -2614,39 +2695,39 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2614
2695
  }),
2615
2696
  [tools]
2616
2697
  );
2617
- return /* @__PURE__ */ jsxs16("div", { className: "pt-panel-page pt-panel-section pt-marketplace", children: [
2618
- /* @__PURE__ */ jsxs16("section", { children: [
2619
- /* @__PURE__ */ jsx18("p", { className: "pt-eyebrow", children: report?.marketplace.name ?? ui.marketplaceEyebrow }),
2620
- /* @__PURE__ */ jsx18("h2", { className: "pt-h2", children: ui.marketplaceTitle }),
2621
- /* @__PURE__ */ jsx18("p", { className: "pt-sub", children: ui.marketplaceIntro }),
2622
- /* @__PURE__ */ jsxs16("div", { className: "pt-panel-row pt-marketplace__status", children: [
2623
- onRefresh && /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onRefresh, disabled: loading, children: loading ? ui.refreshing : ui.refresh }),
2624
- report && onRefresh && /* @__PURE__ */ jsx18("span", { className: "pt-marketplace__age", children: ui.readAt(ageInWords(report.ageSeconds, lang)) })
2698
+ return /* @__PURE__ */ jsxs17("div", { className: "pt-panel-page pt-panel-section pt-marketplace", children: [
2699
+ /* @__PURE__ */ jsxs17("section", { children: [
2700
+ /* @__PURE__ */ jsx19("p", { className: "pt-eyebrow", children: report?.marketplace.name ?? ui.marketplaceEyebrow }),
2701
+ /* @__PURE__ */ jsx19("h2", { className: "pt-h2", children: ui.marketplaceTitle }),
2702
+ /* @__PURE__ */ jsx19("p", { className: "pt-sub", children: ui.marketplaceIntro }),
2703
+ /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row pt-marketplace__status", children: [
2704
+ onRefresh && /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onRefresh, disabled: loading, children: loading ? ui.refreshing : ui.refresh }),
2705
+ report && onRefresh && /* @__PURE__ */ jsx19("span", { className: "pt-marketplace__age", children: ui.readAt(ageInWords(report.ageSeconds, lang)) })
2625
2706
  ] }),
2626
- report?.stale && !report.unavailable && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.catalogueStale(ageInWords(report.ageSeconds, lang)) }),
2627
- report?.unavailable && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.catalogueUnavailable }),
2628
- failure && /* @__PURE__ */ jsx18("p", { className: "pt-warn", children: ui.catalogueFailed })
2707
+ report?.stale && !report.unavailable && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.catalogueStale(ageInWords(report.ageSeconds, lang)) }),
2708
+ report?.unavailable && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.catalogueUnavailable }),
2709
+ failure && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.catalogueFailed })
2629
2710
  ] }),
2630
- report && /* @__PURE__ */ jsxs16("section", { children: [
2631
- /* @__PURE__ */ jsxs16("p", { className: "pt-marketplace__project", children: [
2711
+ report && /* @__PURE__ */ jsxs17("section", { children: [
2712
+ /* @__PURE__ */ jsxs17("p", { className: "pt-marketplace__project", children: [
2632
2713
  ui.stateFrom(report.project.repo, SETTINGS_PATH),
2633
- report.project.settingsStatus === "absent" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2714
+ report.project.settingsStatus === "absent" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2634
2715
  " \xB7 ",
2635
2716
  ui.settingsAbsent
2636
2717
  ] }),
2637
- report.project.settingsStatus === "unreadable" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2718
+ report.project.settingsStatus === "unreadable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2638
2719
  " \xB7 ",
2639
2720
  ui.settingsUnreadable
2640
2721
  ] }),
2641
- report.project.settingsStatus === "unparseable" && /* @__PURE__ */ jsxs16(Fragment4, { children: [
2722
+ report.project.settingsStatus === "unparseable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
2642
2723
  " \xB7 ",
2643
2724
  ui.settingsUnparseable
2644
2725
  ] })
2645
2726
  ] }),
2646
- report.project.detail && /* @__PURE__ */ jsx18("p", { className: "pt-marketplace__detail", children: report.project.detail }),
2647
- /* @__PURE__ */ jsxs16("div", { className: "pt-panel-row pt-marketplace__filters", children: [
2648
- /* @__PURE__ */ jsx18(FilterChip, { label: ui.all, count: counts.all, active: filter === "all", onClick: () => setFilter("all") }),
2649
- /* @__PURE__ */ jsx18(
2727
+ report.project.detail && /* @__PURE__ */ jsx19("p", { className: "pt-marketplace__detail", children: report.project.detail }),
2728
+ /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row pt-marketplace__filters", children: [
2729
+ /* @__PURE__ */ jsx19(FilterChip, { label: ui.all, count: counts.all, active: filter === "all", onClick: () => setFilter("all") }),
2730
+ /* @__PURE__ */ jsx19(
2650
2731
  FilterChip,
2651
2732
  {
2652
2733
  label: ui.filterPlugins,
@@ -2655,7 +2736,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2655
2736
  onClick: () => setFilter("plugins")
2656
2737
  }
2657
2738
  ),
2658
- /* @__PURE__ */ jsx18(
2739
+ /* @__PURE__ */ jsx19(
2659
2740
  FilterChip,
2660
2741
  {
2661
2742
  label: ui.filterActive,
@@ -2664,7 +2745,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2664
2745
  onClick: () => setFilter("active")
2665
2746
  }
2666
2747
  ),
2667
- /* @__PURE__ */ jsx18(
2748
+ /* @__PURE__ */ jsx19(
2668
2749
  FilterChip,
2669
2750
  {
2670
2751
  label: ui.filterStandalone,
@@ -2674,12 +2755,12 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2674
2755
  }
2675
2756
  )
2676
2757
  ] }),
2677
- 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)) })
2758
+ 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)) })
2678
2759
  ] }),
2679
- open && /* @__PURE__ */ jsxs16(DetailSheet, { open: true, onClose: () => setOpen(null), ariaLabel: `${ui.installTitle} \u2014 ${open.name}`, children: [
2680
- /* @__PURE__ */ jsx18("p", { className: "pt-eyebrow", children: ui.installTitle }),
2681
- /* @__PURE__ */ jsx18("h2", { className: "pt-h2", children: open.name }),
2682
- /* @__PURE__ */ jsx18(
2760
+ open && /* @__PURE__ */ jsxs17(DetailSheet, { open: true, onClose: () => setOpen(null), ariaLabel: `${ui.installTitle} \u2014 ${open.name}`, children: [
2761
+ /* @__PURE__ */ jsx19("p", { className: "pt-eyebrow", children: ui.installTitle }),
2762
+ /* @__PURE__ */ jsx19("h2", { className: "pt-h2", children: open.name }),
2763
+ /* @__PURE__ */ jsx19(
2683
2764
  InstallSheet,
2684
2765
  {
2685
2766
  tool: open,
@@ -2688,7 +2769,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
2688
2769
  registered: report?.project.marketplaceRegistered ?? false
2689
2770
  }
2690
2771
  ),
2691
- /* @__PURE__ */ jsx18("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => setOpen(null), children: ui.close })
2772
+ /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => setOpen(null), children: ui.close })
2692
2773
  ] })
2693
2774
  ] });
2694
2775
  }
@@ -2699,9 +2780,9 @@ function InstallSheet({
2699
2780
  registered
2700
2781
  }) {
2701
2782
  const copy = { copy: ui.copy, copied: ui.copied, selected: ui.copySelected };
2702
- return /* @__PURE__ */ jsxs16(Fragment4, { children: [
2703
- tool.claudePlugin ? /* @__PURE__ */ jsxs16(Fragment4, { children: [
2704
- /* @__PURE__ */ jsx18(DetailSection, { title: ui.installRepoTitle, subtitle: ui.installRepoHint, children: /* @__PURE__ */ jsx18(
2783
+ return /* @__PURE__ */ jsxs17(Fragment5, { children: [
2784
+ tool.claudePlugin ? /* @__PURE__ */ jsxs17(Fragment5, { children: [
2785
+ /* @__PURE__ */ jsx19(DetailSection, { title: ui.installRepoTitle, subtitle: ui.installRepoHint, children: /* @__PURE__ */ jsx19(
2705
2786
  CopyBlock,
2706
2787
  {
2707
2788
  text: repositorySnippet(tool.id, marketplace),
@@ -2710,16 +2791,16 @@ function InstallSheet({
2710
2791
  labels: copy
2711
2792
  }
2712
2793
  ) }),
2713
- /* @__PURE__ */ jsx18(DetailSection, { title: ui.installCliTitle, subtitle: ui.installCliHint, children: /* @__PURE__ */ jsx18(CopyBlock, { text: commandSnippet(tool.id, marketplace), labels: copy }) })
2714
- ] }) : /* @__PURE__ */ jsx18("p", { className: "pt-panel-text", children: ui.installNoPlugin }),
2715
- 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 }) }),
2716
- /* @__PURE__ */ jsx18("p", { className: "pt-marketplace__source", children: ui.marketplaceSource(marketplace.url) })
2794
+ /* @__PURE__ */ jsx19(DetailSection, { title: ui.installCliTitle, subtitle: ui.installCliHint, children: /* @__PURE__ */ jsx19(CopyBlock, { text: commandSnippet(tool.id, marketplace), labels: copy }) })
2795
+ ] }) : /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: ui.installNoPlugin }),
2796
+ 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 }) }),
2797
+ /* @__PURE__ */ jsx19("p", { className: "pt-marketplace__source", children: ui.marketplaceSource(marketplace.url) })
2717
2798
  ] });
2718
2799
  }
2719
2800
 
2720
2801
  // src/panel/CardSheet.tsx
2721
2802
  import { useState as useState9 } from "react";
2722
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2803
+ import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
2723
2804
  var LEVEL_LABEL = (ui) => ({
2724
2805
  high: ui.levelHigh,
2725
2806
  medium: ui.levelMedium,
@@ -2746,9 +2827,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2746
2827
  });
2747
2828
  setNote("");
2748
2829
  }
2749
- return /* @__PURE__ */ jsxs17(DetailSheet, { open: true, onClose, ariaLabel: ui.cardDetail, children: [
2750
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.title, children: [
2751
- /* @__PURE__ */ jsx19(
2830
+ return /* @__PURE__ */ jsxs18(DetailSheet, { open: true, onClose, ariaLabel: ui.cardDetail, children: [
2831
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.title, children: [
2832
+ /* @__PURE__ */ jsx20(
2752
2833
  "input",
2753
2834
  {
2754
2835
  className: "pt-input",
@@ -2757,9 +2838,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2757
2838
  onChange: (event) => patch({ title: writeText(lang, event.target.value) })
2758
2839
  }
2759
2840
  ),
2760
- untranslated(card.title) && /* @__PURE__ */ jsx19("span", { className: "pt-flag", children: ui.untranslatedBadge })
2841
+ untranslated(card.title) && /* @__PURE__ */ jsx20("span", { className: "pt-flag", children: ui.untranslatedBadge })
2761
2842
  ] }),
2762
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.detail, children: /* @__PURE__ */ jsx19(
2843
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.detail, children: /* @__PURE__ */ jsx20(
2763
2844
  "textarea",
2764
2845
  {
2765
2846
  className: "pt-textarea",
@@ -2769,7 +2850,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2769
2850
  onChange: (event) => patch({ body: writeText(lang, event.target.value) })
2770
2851
  }
2771
2852
  ) }),
2772
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.areaLabel, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: state.areas.map((area) => /* @__PURE__ */ jsx19(
2853
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.areaLabel, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: state.areas.map((area) => /* @__PURE__ */ jsx20(
2773
2854
  FilterChip,
2774
2855
  {
2775
2856
  label: text(area.label, lang),
@@ -2778,7 +2859,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2778
2859
  },
2779
2860
  area.id
2780
2861
  )) }) }),
2781
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.priority, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx19(
2862
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.priority, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx20(
2782
2863
  FilterChip,
2783
2864
  {
2784
2865
  label: levelLabel[level],
@@ -2787,7 +2868,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2787
2868
  },
2788
2869
  level
2789
2870
  )) }) }),
2790
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.risk, subtitle: ui.riskHint, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx19(
2871
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.risk, subtitle: ui.riskHint, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx20(
2791
2872
  FilterChip,
2792
2873
  {
2793
2874
  label: levelLabel[level],
@@ -2796,7 +2877,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2796
2877
  },
2797
2878
  level
2798
2879
  )) }) }),
2799
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.dependsOn, children: /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: OWNERS.map((owner) => /* @__PURE__ */ jsx19(
2880
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.dependsOn, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: OWNERS.map((owner) => /* @__PURE__ */ jsx20(
2800
2881
  FilterChip,
2801
2882
  {
2802
2883
  label: ownerLabel[owner],
@@ -2805,14 +2886,14 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2805
2886
  },
2806
2887
  owner
2807
2888
  )) }) }),
2808
- /* @__PURE__ */ jsx19(DetailSection, { title: ui.orderTitle, children: /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row", children: [
2809
- /* @__PURE__ */ jsx19(FilterChip, { label: `\u26A1 ${ui.orderOn}`, active: card.order, onClick: () => patch({ order: true }) }),
2810
- /* @__PURE__ */ jsx19(FilterChip, { label: ui.orderOff, active: !card.order, onClick: () => patch({ order: false }) })
2889
+ /* @__PURE__ */ jsx20(DetailSection, { title: ui.orderTitle, children: /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", children: [
2890
+ /* @__PURE__ */ jsx20(FilterChip, { label: `\u26A1 ${ui.orderOn}`, active: card.order, onClick: () => patch({ order: true }) }),
2891
+ /* @__PURE__ */ jsx20(FilterChip, { label: ui.orderOff, active: !card.order, onClick: () => patch({ order: false }) })
2811
2892
  ] }) }),
2812
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.intentTitle, subtitle: ui.intentHint, children: [
2813
- /* @__PURE__ */ jsxs17("div", { className: "pt-panel-row", children: [
2814
- /* @__PURE__ */ jsx19(FilterChip, { label: ui.intentNone, active: card.intent === null, onClick: () => patch({ intent: null }) }),
2815
- INTENTS.map((intent) => /* @__PURE__ */ jsx19(
2893
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.intentTitle, subtitle: ui.intentHint, children: [
2894
+ /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", children: [
2895
+ /* @__PURE__ */ jsx20(FilterChip, { label: ui.intentNone, active: card.intent === null, onClick: () => patch({ intent: null }) }),
2896
+ INTENTS.map((intent) => /* @__PURE__ */ jsx20(
2816
2897
  FilterChip,
2817
2898
  {
2818
2899
  label: INTENT_COPY[intent].label[lang],
@@ -2822,12 +2903,12 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2822
2903
  intent
2823
2904
  ))
2824
2905
  ] }),
2825
- card.intent && /* @__PURE__ */ jsx19("p", { className: "pt-panel-text pt-meaning", children: INTENT_COPY[card.intent].meaning[lang] })
2906
+ card.intent && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text pt-meaning", children: INTENT_COPY[card.intent].meaning[lang] })
2826
2907
  ] }),
2827
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.checklist, children: [
2828
- card.checks.length > 0 && /* @__PURE__ */ jsx19("ul", { className: "pt-checks", children: card.checks.map((check) => /* @__PURE__ */ jsxs17("li", { children: [
2829
- /* @__PURE__ */ jsxs17("label", { children: [
2830
- /* @__PURE__ */ jsx19(
2908
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.checklist, children: [
2909
+ card.checks.length > 0 && /* @__PURE__ */ jsx20("ul", { className: "pt-checks", children: card.checks.map((check) => /* @__PURE__ */ jsxs18("li", { children: [
2910
+ /* @__PURE__ */ jsxs18("label", { children: [
2911
+ /* @__PURE__ */ jsx20(
2831
2912
  "input",
2832
2913
  {
2833
2914
  type: "checkbox",
@@ -2839,9 +2920,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2839
2920
  })
2840
2921
  }
2841
2922
  ),
2842
- /* @__PURE__ */ jsx19("span", { className: check.done ? "is-done" : void 0, children: text(check.text, lang) })
2923
+ /* @__PURE__ */ jsx20("span", { className: check.done ? "is-done" : void 0, children: text(check.text, lang) })
2843
2924
  ] }),
2844
- /* @__PURE__ */ jsx19(
2925
+ /* @__PURE__ */ jsx20(
2845
2926
  "button",
2846
2927
  {
2847
2928
  type: "button",
@@ -2852,8 +2933,8 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2852
2933
  }
2853
2934
  )
2854
2935
  ] }, check.id)) }),
2855
- /* @__PURE__ */ jsxs17("div", { className: "pt-compose", children: [
2856
- /* @__PURE__ */ jsx19(
2936
+ /* @__PURE__ */ jsxs18("div", { className: "pt-compose", children: [
2937
+ /* @__PURE__ */ jsx20(
2857
2938
  "input",
2858
2939
  {
2859
2940
  className: "pt-input",
@@ -2868,19 +2949,19 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2868
2949
  }
2869
2950
  }
2870
2951
  ),
2871
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addStep, children: ui.addStep })
2952
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addStep, children: ui.addStep })
2872
2953
  ] })
2873
2954
  ] }),
2874
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.notes, children: [
2875
- card.notes.map((entry) => /* @__PURE__ */ jsxs17("div", { className: "pt-note", children: [
2876
- /* @__PURE__ */ jsxs17("p", { className: "pt-note__meta", children: [
2955
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.notes, children: [
2956
+ card.notes.map((entry) => /* @__PURE__ */ jsxs18("div", { className: "pt-note", children: [
2957
+ /* @__PURE__ */ jsxs18("p", { className: "pt-note__meta", children: [
2877
2958
  entry.by === "claude" ? "Claude" : ui.ownerYou,
2878
2959
  " \xB7 ",
2879
2960
  entry.date
2880
2961
  ] }),
2881
- /* @__PURE__ */ jsx19("p", { className: "pt-panel-text", children: text(entry.text, lang) })
2962
+ /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: text(entry.text, lang) })
2882
2963
  ] }, entry.id)),
2883
- /* @__PURE__ */ jsx19(
2964
+ /* @__PURE__ */ jsx20(
2884
2965
  "textarea",
2885
2966
  {
2886
2967
  className: "pt-textarea",
@@ -2890,10 +2971,10 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2890
2971
  onChange: (event) => setNote(event.target.value)
2891
2972
  }
2892
2973
  ),
2893
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addNote, children: ui.leaveNote })
2974
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addNote, children: ui.leaveNote })
2894
2975
  ] }),
2895
- /* @__PURE__ */ jsxs17(DetailSection, { title: ui.columnTitle, children: [
2896
- /* @__PURE__ */ jsx19("div", { className: "pt-panel-row", children: state.columns.map((column) => /* @__PURE__ */ jsx19(
2976
+ /* @__PURE__ */ jsxs18(DetailSection, { title: ui.columnTitle, children: [
2977
+ /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: state.columns.map((column) => /* @__PURE__ */ jsx20(
2897
2978
  FilterChip,
2898
2979
  {
2899
2980
  label: text(column.title, lang),
@@ -2904,16 +2985,16 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
2904
2985
  },
2905
2986
  column.id
2906
2987
  )) }),
2907
- (card.startedAt || card.completedAt) && /* @__PURE__ */ jsxs17("p", { className: "pt-panel-text pt-stamps", children: [
2988
+ (card.startedAt || card.completedAt) && /* @__PURE__ */ jsxs18("p", { className: "pt-panel-text pt-stamps", children: [
2908
2989
  card.startedAt && `${ui.started}: ${card.startedAt}`,
2909
2990
  card.startedAt && card.completedAt && " \xB7 ",
2910
2991
  card.completedAt && `${ui.completed}: ${card.completedAt}`
2911
2992
  ] }),
2912
- claimedWithoutStarting(card) && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.neverStarted })
2993
+ claimedWithoutStarting(card) && /* @__PURE__ */ jsx20("p", { className: "pt-warn", children: ui.neverStarted })
2913
2994
  ] }),
2914
- /* @__PURE__ */ jsxs17("div", { className: "pt-sheet-actions", children: [
2915
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onClose, children: ui.close }),
2916
- /* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm pt-danger", onClick: () => onDelete(card.id), children: ui.deleteCard })
2995
+ /* @__PURE__ */ jsxs18("div", { className: "pt-sheet-actions", children: [
2996
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: onClose, children: ui.close }),
2997
+ /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-danger", onClick: () => onDelete(card.id), children: ui.deleteCard })
2917
2998
  ] })
2918
2999
  ] });
2919
3000
  }
@@ -2946,7 +3027,7 @@ function resolveTheme(saved, stored, themes, hasImported, fallback) {
2946
3027
  }
2947
3028
 
2948
3029
  // src/panel/PanelApp.tsx
2949
- import { Fragment as Fragment5, jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
3030
+ import { Fragment as Fragment6, jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
2950
3031
  var IMPORTED = "imported";
2951
3032
  var WIZARD_KEY = "paneltir:setup-done";
2952
3033
  var THEME_KEY = "paneltir:theme";
@@ -3075,11 +3156,11 @@ function PanelApp({
3075
3156
  status: state_("GH_TOKEN"),
3076
3157
  variable: "GH_TOKEN",
3077
3158
  enables: ui.needTokenEnables,
3078
- fix: /* @__PURE__ */ jsxs18("ol", { children: [
3079
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenCreate }),
3080
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenScope }),
3081
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenPaste }),
3082
- /* @__PURE__ */ jsx20("li", { children: ui.fixTokenRedeploy })
3159
+ fix: /* @__PURE__ */ jsxs19("ol", { children: [
3160
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenCreate }),
3161
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenScope }),
3162
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenPaste }),
3163
+ /* @__PURE__ */ jsx21("li", { children: ui.fixTokenRedeploy })
3083
3164
  ] })
3084
3165
  },
3085
3166
  {
@@ -3088,7 +3169,7 @@ function PanelApp({
3088
3169
  status: state_("PANEL_REPO"),
3089
3170
  variable: "PANEL_REPO",
3090
3171
  enables: ui.needRepoEnables,
3091
- fix: /* @__PURE__ */ jsx20("p", { children: ui.fixRepo })
3172
+ fix: /* @__PURE__ */ jsx21("p", { children: ui.fixRepo })
3092
3173
  },
3093
3174
  // The gate is the only requirement here that is not an environment
3094
3175
  // variable: it is files this project owns, and the only one whose
@@ -3115,12 +3196,12 @@ function PanelApp({
3115
3196
  label: ui.needGate,
3116
3197
  status: gateReading.verdict === "current" ? "ok" : gateReading.verdict === "behind" ? "missing" : "unknown",
3117
3198
  enables: ui.needGateEnables,
3118
- fix: /* @__PURE__ */ jsxs18(Fragment5, { children: [
3119
- /* @__PURE__ */ jsxs18("p", { children: [
3199
+ fix: /* @__PURE__ */ jsxs19(Fragment6, { children: [
3200
+ /* @__PURE__ */ jsxs19("p", { children: [
3120
3201
  ui.fixGate,
3121
3202
  gateReading.copiedFrom ? ` (v${gateReading.copiedFrom} \u2192 v${gateReading.installed})` : ""
3122
3203
  ] }),
3123
- /* @__PURE__ */ jsx20("pre", { className: "pt-copy__pre", children: "npx paneltir doctor" })
3204
+ /* @__PURE__ */ jsx21("pre", { className: "pt-copy__pre", children: "npx paneltir doctor" })
3124
3205
  ] })
3125
3206
  }]
3126
3207
  ];
@@ -3154,14 +3235,24 @@ function PanelApp({
3154
3235
  [filter]
3155
3236
  );
3156
3237
  const visibleCards = useMemo5(() => state.cards.filter(matches), [state.cards, matches]);
3238
+ const archivedCards = useMemo5(
3239
+ () => state.cards.filter((card) => isArchived(card, doneColumns)),
3240
+ [state.cards, doneColumns]
3241
+ );
3242
+ const archivedIds = useMemo5(() => new Set(archivedCards.map((card) => card.id)), [archivedCards]);
3243
+ const hasRecord = Boolean(showHistory) || archivedCards.length > 0;
3244
+ const openChoices = useMemo5(
3245
+ () => state.analysis ? undecided(state.analysis).length : 0,
3246
+ [state.analysis]
3247
+ );
3157
3248
  const boardColumns = useMemo5(
3158
3249
  () => state.columns.map((column) => ({
3159
3250
  id: column.id,
3160
3251
  title: t(column.title),
3161
3252
  hint: column.hint ? t(column.hint) : void 0,
3162
- cards: visibleCards.filter((card) => card.column === column.id)
3253
+ cards: visibleCards.filter((card) => card.column === column.id && !archivedIds.has(card.id))
3163
3254
  })),
3164
- [state.columns, visibleCards, t]
3255
+ [state.columns, visibleCards, archivedIds, t]
3165
3256
  );
3166
3257
  const notifications = useMemo5(() => {
3167
3258
  const items = [];
@@ -3531,21 +3622,21 @@ function PanelApp({
3531
3622
  state.updatedAt,
3532
3623
  save.status === "saved" ? ui.savedAt(save.at) : dirty ? ui.unsaved : ""
3533
3624
  ].filter(Boolean).join(" \xB7 ");
3534
- return /* @__PURE__ */ jsxs18(DashboardThemeProvider, { tokens: theme, form, className, children: [
3625
+ return /* @__PURE__ */ jsxs19(DashboardThemeProvider, { tokens: theme, form, className, children: [
3535
3626
  typeof decoration === "function" ? decoration(themeName) : decoration,
3536
- /* @__PURE__ */ jsx20(
3627
+ /* @__PURE__ */ jsx21(
3537
3628
  DashboardHeader,
3538
3629
  {
3539
3630
  wordmark: (
3540
3631
  /* A board belongs to a project, so its name is what goes here. A
3541
3632
  caller with a mark of its own passes `brand`; drawing one here
3542
3633
  would be the kit deciding what somebody else's panel is called. */
3543
- brand ?? /* @__PURE__ */ jsx20("span", { className: "pt-panel-brand", children: state.project })
3634
+ brand ?? /* @__PURE__ */ jsx21("span", { className: "pt-panel-brand", children: state.project })
3544
3635
  ),
3545
3636
  status,
3546
- controls: /* @__PURE__ */ jsxs18(Fragment5, { children: [
3547
- (initialState.analysis || hasMarketplace || showHistory) && /* @__PURE__ */ jsxs18("span", { className: "pt-views", children: [
3548
- /* @__PURE__ */ jsx20(
3637
+ controls: /* @__PURE__ */ jsxs19(Fragment6, { children: [
3638
+ (initialState.analysis || hasMarketplace || hasRecord) && /* @__PURE__ */ jsxs19("span", { className: "pt-views", children: [
3639
+ /* @__PURE__ */ jsx21(
3549
3640
  "button",
3550
3641
  {
3551
3642
  type: "button",
@@ -3555,7 +3646,7 @@ function PanelApp({
3555
3646
  children: ui.board
3556
3647
  }
3557
3648
  ),
3558
- initialState.analysis && /* @__PURE__ */ jsx20(
3649
+ initialState.analysis && /* @__PURE__ */ jsx21(
3559
3650
  "button",
3560
3651
  {
3561
3652
  type: "button",
@@ -3565,7 +3656,7 @@ function PanelApp({
3565
3656
  children: ui.analysis
3566
3657
  }
3567
3658
  ),
3568
- hasMarketplace && /* @__PURE__ */ jsx20(
3659
+ hasMarketplace && /* @__PURE__ */ jsx21(
3569
3660
  "button",
3570
3661
  {
3571
3662
  type: "button",
@@ -3575,18 +3666,18 @@ function PanelApp({
3575
3666
  children: ui.marketplace
3576
3667
  }
3577
3668
  ),
3578
- showHistory && /* @__PURE__ */ jsx20(
3669
+ hasRecord && /* @__PURE__ */ jsx21(
3579
3670
  "button",
3580
3671
  {
3581
3672
  type: "button",
3582
3673
  className: `pt-lang${view === "history" ? " is-on" : ""}`,
3583
3674
  "aria-pressed": view === "history",
3584
3675
  onClick: () => setView("history"),
3585
- children: ui.history
3676
+ children: showHistory ? ui.history : ui.archiveTitle
3586
3677
  }
3587
3678
  )
3588
3679
  ] }),
3589
- showLanguage && LANGS.map((code) => /* @__PURE__ */ jsx20(
3680
+ showLanguage && LANGS.map((code) => /* @__PURE__ */ jsx21(
3590
3681
  "button",
3591
3682
  {
3592
3683
  type: "button",
@@ -3597,7 +3688,7 @@ function PanelApp({
3597
3688
  },
3598
3689
  code
3599
3690
  )),
3600
- /* @__PURE__ */ jsx20(
3691
+ /* @__PURE__ */ jsx21(
3601
3692
  NotificationBell,
3602
3693
  {
3603
3694
  notifications,
@@ -3611,8 +3702,8 @@ function PanelApp({
3611
3702
  }
3612
3703
  }
3613
3704
  ),
3614
- saveEndpoint && /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-lang", onClick: () => setHelpOpen(true), children: ui.help }),
3615
- saveEndpoint && (dirty || save.status === "saving") && /* @__PURE__ */ jsx20(
3705
+ saveEndpoint && /* @__PURE__ */ jsx21("button", { type: "button", className: "pt-lang", onClick: () => setHelpOpen(true), children: ui.help }),
3706
+ saveEndpoint && (dirty || save.status === "saving") && /* @__PURE__ */ jsx21(
3616
3707
  "button",
3617
3708
  {
3618
3709
  type: "button",
@@ -3627,7 +3718,7 @@ function PanelApp({
3627
3718
  onLinkClick: () => setSettingsOpen(true)
3628
3719
  }
3629
3720
  ),
3630
- state.notice && /* @__PURE__ */ jsx20(
3721
+ state.notice && /* @__PURE__ */ jsx21(
3631
3722
  AlertBanner,
3632
3723
  {
3633
3724
  visible: noticeVisible,
@@ -3636,8 +3727,8 @@ function PanelApp({
3636
3727
  onAction: () => setNoticeVisible(false)
3637
3728
  }
3638
3729
  ),
3639
- save.status === "error" && /* @__PURE__ */ jsx20(AlertBanner, { visible: true, message: `${ui.saveFailed}: ${save.message}` }),
3640
- saveEndpoint && setup && !setup.ready && !setup.unknown && !wizardOpen && /* @__PURE__ */ jsx20(
3730
+ save.status === "error" && /* @__PURE__ */ jsx21(AlertBanner, { visible: true, message: `${ui.saveFailed}: ${save.message}` }),
3731
+ saveEndpoint && setup && !setup.ready && !setup.unknown && !wizardOpen && /* @__PURE__ */ jsx21(
3641
3732
  AlertBanner,
3642
3733
  {
3643
3734
  visible: true,
@@ -3646,7 +3737,7 @@ function PanelApp({
3646
3737
  onAction: () => setWizardOpen(true)
3647
3738
  }
3648
3739
  ),
3649
- view === "board" && !saveEndpoint && /* @__PURE__ */ jsx20(
3740
+ view === "board" && !saveEndpoint && /* @__PURE__ */ jsx21(
3650
3741
  GuideTour,
3651
3742
  {
3652
3743
  dismissed: state.preferences?.guideDismissed,
@@ -3655,32 +3746,32 @@ function PanelApp({
3655
3746
  {
3656
3747
  id: "demo-welcome",
3657
3748
  title: ui.demoTourWelcomeTitle,
3658
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourWelcomeBody }),
3749
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourWelcomeBody }),
3659
3750
  dismissLabel: ui.gotIt
3660
3751
  },
3661
3752
  {
3662
3753
  id: "demo-board",
3663
3754
  title: ui.demoTourBoardTitle,
3664
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourBoardBody }),
3755
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourBoardBody }),
3665
3756
  dismissLabel: ui.gotIt
3666
3757
  },
3667
3758
  {
3668
3759
  id: "demo-theme",
3669
3760
  title: ui.demoTourThemeTitle,
3670
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourThemeBody }),
3761
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourThemeBody }),
3671
3762
  dismissLabel: ui.gotIt,
3672
3763
  action: { label: ui.settings, onClick: () => setSettingsOpen(true) }
3673
3764
  },
3674
3765
  {
3675
3766
  id: "demo-keep",
3676
3767
  title: ui.demoTourKeepTitle,
3677
- children: /* @__PURE__ */ jsx20("p", { children: ui.demoTourKeepBody }),
3768
+ children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourKeepBody }),
3678
3769
  dismissLabel: ui.gotIt
3679
3770
  }
3680
3771
  ]
3681
3772
  }
3682
3773
  ),
3683
- view === "board" && saveEndpoint && /* @__PURE__ */ jsx20(
3774
+ view === "board" && saveEndpoint && /* @__PURE__ */ jsx21(
3684
3775
  GuideTour,
3685
3776
  {
3686
3777
  dismissed: state.preferences?.guideDismissed,
@@ -3689,38 +3780,38 @@ function PanelApp({
3689
3780
  {
3690
3781
  id: "welcome",
3691
3782
  title: ui.tourWelcomeTitle,
3692
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourWelcomeBody }),
3783
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourWelcomeBody }),
3693
3784
  dismissLabel: ui.gotIt
3694
3785
  },
3695
3786
  {
3696
3787
  id: "board",
3697
3788
  title: ui.tourBoardTitle,
3698
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourBoardBody }),
3789
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourBoardBody }),
3699
3790
  dismissLabel: ui.gotIt
3700
3791
  },
3701
3792
  {
3702
3793
  id: "orders",
3703
3794
  title: ui.tourOrdersTitle,
3704
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourOrdersBody }),
3795
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourOrdersBody }),
3705
3796
  dismissLabel: ui.gotIt
3706
3797
  },
3707
3798
  {
3708
3799
  id: "save",
3709
3800
  title: ui.tourSaveTitle,
3710
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourSaveBody }),
3801
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourSaveBody }),
3711
3802
  dismissLabel: ui.gotIt
3712
3803
  },
3713
3804
  {
3714
3805
  id: "theme",
3715
3806
  title: ui.tourThemeTitle,
3716
- children: /* @__PURE__ */ jsx20("p", { children: ui.tourThemeBody }),
3807
+ children: /* @__PURE__ */ jsx21("p", { children: ui.tourThemeBody }),
3717
3808
  dismissLabel: ui.gotIt,
3718
3809
  action: { label: ui.settings, onClick: () => setSettingsOpen(true) }
3719
3810
  }
3720
3811
  ]
3721
3812
  }
3722
3813
  ),
3723
- view === "marketplace" && hasMarketplace && /* @__PURE__ */ jsx20(
3814
+ view === "marketplace" && hasMarketplace && /* @__PURE__ */ jsx21(
3724
3815
  MarketplaceView,
3725
3816
  {
3726
3817
  report: market,
@@ -3731,7 +3822,7 @@ function PanelApp({
3731
3822
  onRefresh: marketplaceEndpoint ? () => loadMarketplace(true) : void 0
3732
3823
  }
3733
3824
  ),
3734
- view === "analysis" && state.analysis && /* @__PURE__ */ jsx20(
3825
+ view === "analysis" && state.analysis && /* @__PURE__ */ jsx21(
3735
3826
  AnalysisView,
3736
3827
  {
3737
3828
  onRequestReport: saveEndpoint ? requestReport : void 0,
@@ -3747,20 +3838,52 @@ function PanelApp({
3747
3838
  onOpenCard: setOpenCardId
3748
3839
  }
3749
3840
  ),
3750
- view === "board" && /* @__PURE__ */ jsxs18(Fragment5, { children: [
3751
- /* @__PURE__ */ jsxs18("div", { className: "pt-panel-page", children: [
3752
- /* @__PURE__ */ jsxs18(StatTileGrid, { children: [
3753
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statOpen, value: counts.open, isZero: counts.open === 0 }),
3754
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statOrders, value: counts.orders, tone: "warning", isZero: counts.orders === 0 }),
3755
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statYours, value: counts.yours, tone: "danger", isZero: counts.yours === 0 }),
3756
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statDecisions, value: counts.decisions, tone: "warning", isZero: counts.decisions === 0 }),
3757
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statHighRisk, value: counts.highRisk, tone: "danger", isZero: counts.highRisk === 0 }),
3758
- /* @__PURE__ */ jsx20(StatTile, { label: ui.statDone, value: counts.done, tone: "success", isZero: counts.done === 0 })
3841
+ view === "board" && /* @__PURE__ */ jsxs19(Fragment6, { children: [
3842
+ /* @__PURE__ */ jsxs19("div", { className: "pt-panel-page", children: [
3843
+ /* @__PURE__ */ jsx21(
3844
+ SituationRow,
3845
+ {
3846
+ blockingLabel: ui.situationBlocking,
3847
+ clearLabel: ui.situationClear,
3848
+ statusLabel: ui.situationStatus,
3849
+ blocking: [
3850
+ {
3851
+ id: "yours",
3852
+ label: ui.statYours,
3853
+ hint: ui.situationYoursHint,
3854
+ count: counts.yours,
3855
+ tone: "alarm",
3856
+ onClick: () => setFilter("yours")
3857
+ },
3858
+ {
3859
+ id: "decisions",
3860
+ label: ui.statDecisions,
3861
+ hint: ui.situationDecisionsHint,
3862
+ count: openChoices,
3863
+ tone: "alarm",
3864
+ onClick: initialState.analysis ? () => setView("analysis") : void 0
3865
+ },
3866
+ {
3867
+ id: "orders",
3868
+ label: ui.statOrders,
3869
+ hint: ui.situationOrdersHint,
3870
+ count: counts.orders,
3871
+ tone: "attention",
3872
+ onClick: () => setFilter("orders")
3873
+ }
3874
+ ],
3875
+ 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
3876
+ }
3877
+ ),
3878
+ /* @__PURE__ */ jsxs19(StatTileGrid, { children: [
3879
+ /* @__PURE__ */ jsx21(StatTile, { label: ui.statOpen, value: counts.open, isZero: counts.open === 0 }),
3880
+ /* @__PURE__ */ jsx21(StatTile, { label: ui.statHighRisk, value: counts.highRisk, tone: "danger", isZero: counts.highRisk === 0 }),
3881
+ /* @__PURE__ */ jsx21(StatTile, { label: ui.statDone, value: counts.done, tone: "success", isZero: counts.done === 0 }),
3882
+ archivedCards.length > 0 && /* @__PURE__ */ jsx21(StatTile, { label: ui.statArchived, value: archivedCards.length, isZero: true })
3759
3883
  ] }),
3760
- /* @__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))) }),
3761
- /* @__PURE__ */ jsxs18(FilterChipRow, { children: [
3762
- /* @__PURE__ */ jsx20(FilterChip, { label: ui.all, count: state.cards.length, active: filter === "all", onClick: () => setFilter("all") }),
3763
- /* @__PURE__ */ jsx20(
3884
+ /* @__PURE__ */ jsxs19(FilterChipRow, { children: [
3885
+ /* @__PURE__ */ jsx21(FilterChip, { label: ui.all, count: state.cards.length, active: filter === "all", onClick: () => setFilter("all") }),
3886
+ /* @__PURE__ */ jsx21(
3764
3887
  FilterChip,
3765
3888
  {
3766
3889
  label: `\u26A1 ${ui.filterForClaude}`,
@@ -3769,7 +3892,7 @@ function PanelApp({
3769
3892
  onClick: () => setFilter("orders")
3770
3893
  }
3771
3894
  ),
3772
- /* @__PURE__ */ jsx20(
3895
+ /* @__PURE__ */ jsx21(
3773
3896
  FilterChip,
3774
3897
  {
3775
3898
  label: ui.filterYours,
@@ -3778,7 +3901,7 @@ function PanelApp({
3778
3901
  onClick: () => setFilter("yours")
3779
3902
  }
3780
3903
  ),
3781
- /* @__PURE__ */ jsx20(
3904
+ /* @__PURE__ */ jsx21(
3782
3905
  FilterChip,
3783
3906
  {
3784
3907
  label: ui.filterHighRisk,
@@ -3787,7 +3910,7 @@ function PanelApp({
3787
3910
  onClick: () => setFilter("risk")
3788
3911
  }
3789
3912
  ),
3790
- state.areas.map((area) => /* @__PURE__ */ jsx20(
3913
+ state.areas.map((area) => /* @__PURE__ */ jsx21(
3791
3914
  FilterChip,
3792
3915
  {
3793
3916
  label: t(area.label),
@@ -3799,13 +3922,13 @@ function PanelApp({
3799
3922
  ))
3800
3923
  ] })
3801
3924
  ] }),
3802
- /* @__PURE__ */ jsx20(
3925
+ /* @__PURE__ */ jsx21(
3803
3926
  Board,
3804
3927
  {
3805
3928
  columns: boardColumns,
3806
3929
  onMove: moveCard,
3807
3930
  onAddCard: addCard,
3808
- renderCard: (card, index, columnId) => /* @__PURE__ */ jsx20(
3931
+ renderCard: (card, index, columnId) => /* @__PURE__ */ jsx21(
3809
3932
  Card,
3810
3933
  {
3811
3934
  cardId: card.id,
@@ -3822,51 +3945,72 @@ function PanelApp({
3822
3945
  }
3823
3946
  ),
3824
3947
  extras,
3825
- capabilities && capabilities.length > 0 && /* @__PURE__ */ jsxs18("section", { className: "pt-panel-page pt-panel-section", id: "functions", children: [
3826
- /* @__PURE__ */ jsxs18("div", { children: [
3827
- /* @__PURE__ */ jsx20("p", { className: "pt-eyebrow", children: ui.functionsEyebrow }),
3828
- /* @__PURE__ */ jsx20("h2", { className: "pt-h2", children: ui.functionsTitle }),
3829
- /* @__PURE__ */ jsx20("p", { className: "pt-sub", children: ui.functionsIntro })
3948
+ capabilities && capabilities.length > 0 && /* @__PURE__ */ jsxs19("section", { className: "pt-panel-page pt-panel-section", id: "functions", children: [
3949
+ /* @__PURE__ */ jsxs19("div", { children: [
3950
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: ui.functionsEyebrow }),
3951
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.functionsTitle }),
3952
+ /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.functionsIntro })
3830
3953
  ] }),
3831
- /* @__PURE__ */ jsx20("div", { className: "pt-cap-list", children: capabilities.map((capability) => /* @__PURE__ */ jsxs18("article", { className: "pt-cap pt-hud", children: [
3832
- /* @__PURE__ */ jsx20("h3", { className: "pt-cap__title", children: t(capability.title) }),
3833
- /* @__PURE__ */ jsx20("p", { className: "pt-cap__summary", children: t(capability.summary) }),
3834
- /* @__PURE__ */ jsx20("ul", { className: "pt-cap__list", children: capability.points.map((point) => /* @__PURE__ */ jsx20("li", { children: t(point) }, t(point))) }),
3835
- capability.code && /* @__PURE__ */ jsxs18("div", { className: "pt-cap__code", children: [
3836
- /* @__PURE__ */ jsx20("p", { className: "pt-cap__caption", children: t(capability.code.caption) }),
3837
- /* @__PURE__ */ jsx20("pre", { children: /* @__PURE__ */ jsx20("code", { children: capability.code.body }) })
3954
+ /* @__PURE__ */ jsx21("div", { className: "pt-cap-list", children: capabilities.map((capability) => /* @__PURE__ */ jsxs19("article", { className: "pt-cap pt-hud", children: [
3955
+ /* @__PURE__ */ jsx21("h3", { className: "pt-cap__title", children: t(capability.title) }),
3956
+ /* @__PURE__ */ jsx21("p", { className: "pt-cap__summary", children: t(capability.summary) }),
3957
+ /* @__PURE__ */ jsx21("ul", { className: "pt-cap__list", children: capability.points.map((point) => /* @__PURE__ */ jsx21("li", { children: t(point) }, t(point))) }),
3958
+ capability.code && /* @__PURE__ */ jsxs19("div", { className: "pt-cap__code", children: [
3959
+ /* @__PURE__ */ jsx21("p", { className: "pt-cap__caption", children: t(capability.code.caption) }),
3960
+ /* @__PURE__ */ jsx21("pre", { children: /* @__PURE__ */ jsx21("code", { children: capability.code.body }) })
3838
3961
  ] })
3839
3962
  ] }, capability.id)) })
3840
3963
  ] })
3841
3964
  ] }),
3842
- view === "history" && showHistory && /* @__PURE__ */ jsxs18("section", { className: "pt-panel-page pt-panel-section", id: "revisions", children: [
3843
- /* @__PURE__ */ jsxs18("div", { children: [
3844
- /* @__PURE__ */ jsx20("p", { className: "pt-eyebrow", children: ui.historyEyebrow }),
3845
- /* @__PURE__ */ jsx20("h2", { className: "pt-h2", children: ui.historyTitle }),
3846
- /* @__PURE__ */ jsx20("p", { className: "pt-sub", children: ui.historyIntro })
3847
- ] }),
3848
- 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: [
3849
- /* @__PURE__ */ jsxs18("p", { className: "pt-run__meta", children: [
3850
- run.date,
3851
- " \xB7 ",
3852
- run.by === "claude" ? "Claude" : ui.ownerYou,
3853
- run.fingerprint ? ` \xB7 ${run.fingerprint.replace("sha256:", "").slice(0, 12)}` : ""
3965
+ view === "history" && hasRecord && /* @__PURE__ */ jsxs19("section", { className: "pt-panel-page pt-panel-section", id: "revisions", children: [
3966
+ showHistory && /* @__PURE__ */ jsxs19(Fragment6, { children: [
3967
+ /* @__PURE__ */ jsxs19("div", { children: [
3968
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: ui.historyEyebrow }),
3969
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.historyTitle }),
3970
+ /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.historyIntro })
3854
3971
  ] }),
3855
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: t(run.summary) }),
3856
- run.cards.length > 0 && /* @__PURE__ */ jsxs18("p", { className: "pt-run__cards", children: [
3857
- /* @__PURE__ */ jsxs18("span", { children: [
3858
- ui.historyTouched,
3859
- ":"
3972
+ 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: [
3973
+ /* @__PURE__ */ jsxs19("p", { className: "pt-run__meta", children: [
3974
+ run.date,
3975
+ " \xB7 ",
3976
+ run.by === "claude" ? "Claude" : ui.ownerYou,
3977
+ run.fingerprint ? ` \xB7 ${run.fingerprint.replace("sha256:", "").slice(0, 12)}` : ""
3860
3978
  ] }),
3861
- " ",
3862
- run.cards.map((id) => {
3863
- const card = state.cards.find((candidate) => candidate.id === id);
3864
- return card ? t(card.title) || ui.untitled : id;
3865
- }).join(" \xB7 ")
3866
- ] })
3867
- ] }, run.id)) })
3979
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: t(run.summary) }),
3980
+ run.cards.length > 0 && /* @__PURE__ */ jsxs19("p", { className: "pt-run__cards", children: [
3981
+ /* @__PURE__ */ jsxs19("span", { children: [
3982
+ ui.historyTouched,
3983
+ ":"
3984
+ ] }),
3985
+ " ",
3986
+ run.cards.map((id) => {
3987
+ const card = state.cards.find((candidate) => candidate.id === id);
3988
+ return card ? t(card.title) || ui.untitled : id;
3989
+ }).join(" \xB7 ")
3990
+ ] })
3991
+ ] }, run.id)) })
3992
+ ] }),
3993
+ archivedCards.length > 0 && /* @__PURE__ */ jsxs19(Fragment6, { children: [
3994
+ /* @__PURE__ */ jsxs19("div", { children: [
3995
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: ui.archiveTitle }),
3996
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.archiveHeading }),
3997
+ /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.archiveIntro })
3998
+ ] }),
3999
+ /* @__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(
4000
+ "button",
4001
+ {
4002
+ type: "button",
4003
+ className: "pt-archive__row",
4004
+ onClick: () => setOpenCardId(card.id),
4005
+ children: [
4006
+ /* @__PURE__ */ jsx21("span", { className: "pt-archive__title", children: t(card.title) || ui.untitled }),
4007
+ /* @__PURE__ */ jsx21("span", { className: "pt-archive__meta", children: card.completedAt ? ui.archiveFinished(card.completedAt) : "" })
4008
+ ]
4009
+ }
4010
+ ) }, card.id)) })
4011
+ ] })
3868
4012
  ] }),
3869
- /* @__PURE__ */ jsx20(
4013
+ /* @__PURE__ */ jsx21(
3870
4014
  CardSheet,
3871
4015
  {
3872
4016
  card: openCard,
@@ -3878,7 +4022,7 @@ function PanelApp({
3878
4022
  onClose: () => setOpenCardId(null)
3879
4023
  }
3880
4024
  ),
3881
- /* @__PURE__ */ jsx20(
4025
+ /* @__PURE__ */ jsx21(
3882
4026
  DetailSheet,
3883
4027
  {
3884
4028
  open: wizardOpen,
@@ -3887,7 +4031,7 @@ function PanelApp({
3887
4031
  setWizardOpen(false);
3888
4032
  },
3889
4033
  ariaLabel: ui.wizardTitle,
3890
- children: /* @__PURE__ */ jsx20(
4034
+ children: /* @__PURE__ */ jsx21(
3891
4035
  SetupWizard,
3892
4036
  {
3893
4037
  requirements,
@@ -3919,9 +4063,9 @@ function PanelApp({
3919
4063
  )
3920
4064
  }
3921
4065
  ),
3922
- /* @__PURE__ */ jsxs18(DetailSheet, { open: helpOpen, onClose: () => setHelpOpen(false), ariaLabel: ui.helpTitle, children: [
3923
- /* @__PURE__ */ jsx20(DetailSection, { title: ui.helpTitle, children: !setup ? /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.setupChecking }) : /* @__PURE__ */ jsxs18(Fragment5, { children: [
3924
- /* @__PURE__ */ jsx20(
4066
+ /* @__PURE__ */ jsxs19(DetailSheet, { open: helpOpen, onClose: () => setHelpOpen(false), ariaLabel: ui.helpTitle, children: [
4067
+ /* @__PURE__ */ jsx21(DetailSection, { title: ui.helpTitle, children: !setup ? /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.setupChecking }) : /* @__PURE__ */ jsxs19(Fragment6, { children: [
4068
+ /* @__PURE__ */ jsx21(
3925
4069
  SetupGuide,
3926
4070
  {
3927
4071
  requirements,
@@ -3934,8 +4078,8 @@ function PanelApp({
3934
4078
  }
3935
4079
  }
3936
4080
  ),
3937
- setup.repo && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 12 }, children: ui.setupWriteTarget(setup.repo, setup.branch, setup.file) }),
3938
- !setup.ready && /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", style: { marginTop: 12 }, children: /* @__PURE__ */ jsx20(
4081
+ setup.repo && /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 12 }, children: ui.setupWriteTarget(setup.repo, setup.branch, setup.file) }),
4082
+ !setup.ready && /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", style: { marginTop: 12 }, children: /* @__PURE__ */ jsx21(
3939
4083
  "button",
3940
4084
  {
3941
4085
  type: "button",
@@ -3948,7 +4092,7 @@ function PanelApp({
3948
4092
  }
3949
4093
  ) })
3950
4094
  ] }) }),
3951
- /* @__PURE__ */ jsx20(DetailSection, { title: ui.guideSection, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx20(
4095
+ /* @__PURE__ */ jsx21(DetailSection, { title: ui.guideSection, children: /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
3952
4096
  "button",
3953
4097
  {
3954
4098
  type: "button",
@@ -3966,24 +4110,24 @@ function PanelApp({
3966
4110
  }
3967
4111
  ) }) })
3968
4112
  ] }),
3969
- update?.behind && /* @__PURE__ */ jsxs18(
4113
+ update?.behind && /* @__PURE__ */ jsxs19(
3970
4114
  DetailSheet,
3971
4115
  {
3972
4116
  open: releaseOpen,
3973
4117
  onClose: () => setReleaseOpen(false),
3974
4118
  ariaLabel: ui.releaseTitle(update.latest),
3975
4119
  children: [
3976
- /* @__PURE__ */ jsxs18("div", { children: [
3977
- /* @__PURE__ */ jsx20("p", { className: "pt-eyebrow", children: releaseShape(update.notes) ? ui.releaseShape[releaseShape(update.notes)] : "" }),
3978
- /* @__PURE__ */ jsx20("h2", { className: "pt-h2", children: ui.releaseTitle(update.latest) }),
3979
- update.notes?.date && /* @__PURE__ */ jsx20("p", { className: "pt-sub", children: ui.releaseDate(update.notes.date) })
4120
+ /* @__PURE__ */ jsxs19("div", { children: [
4121
+ /* @__PURE__ */ jsx21("p", { className: "pt-eyebrow", children: releaseShape(update.notes) ? ui.releaseShape[releaseShape(update.notes)] : "" }),
4122
+ /* @__PURE__ */ jsx21("h2", { className: "pt-h2", children: ui.releaseTitle(update.latest) }),
4123
+ update.notes?.date && /* @__PURE__ */ jsx21("p", { className: "pt-sub", children: ui.releaseDate(update.notes.date) })
3980
4124
  ] }),
3981
- update.notes ? /* @__PURE__ */ jsx20("ul", { className: "pt-runs", children: update.notes.entries.map((item, index) => /* @__PURE__ */ jsxs18("li", { className: "pt-run pt-hud", children: [
3982
- /* @__PURE__ */ jsx20("p", { className: "pt-run__meta", children: ui.releaseKind[item.kind] }),
3983
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: item.text[lang] })
3984
- ] }, index)) }) : /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.releaseNone }),
3985
- /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", style: { marginTop: 16 }, children: [
3986
- /* @__PURE__ */ jsx20(
4125
+ update.notes ? /* @__PURE__ */ jsx21("ul", { className: "pt-runs", children: update.notes.entries.map((item, index) => /* @__PURE__ */ jsxs19("li", { className: "pt-run pt-hud", children: [
4126
+ /* @__PURE__ */ jsx21("p", { className: "pt-run__meta", children: ui.releaseKind[item.kind] }),
4127
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: item.text[lang] })
4128
+ ] }, index)) }) : /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.releaseNone }),
4129
+ /* @__PURE__ */ jsxs19("div", { className: "pt-panel-row", style: { marginTop: 16 }, children: [
4130
+ /* @__PURE__ */ jsx21(
3987
4131
  "button",
3988
4132
  {
3989
4133
  type: "button",
@@ -3995,14 +4139,14 @@ function PanelApp({
3995
4139
  children: ui.updateCreateCard
3996
4140
  }
3997
4141
  ),
3998
- /* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn", onClick: () => setReleaseOpen(false), children: ui.releaseClose })
4142
+ /* @__PURE__ */ jsx21("button", { type: "button", className: "pt-btn", onClick: () => setReleaseOpen(false), children: ui.releaseClose })
3999
4143
  ] })
4000
4144
  ]
4001
4145
  }
4002
4146
  ),
4003
- /* @__PURE__ */ jsxs18(DetailSheet, { open: settingsOpen, onClose: () => setSettingsOpen(false), ariaLabel: ui.panelSettings, children: [
4004
- saveEndpoint ? /* @__PURE__ */ jsxs18(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: [
4005
- /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx20(
4147
+ /* @__PURE__ */ jsxs19(DetailSheet, { open: settingsOpen, onClose: () => setSettingsOpen(false), ariaLabel: ui.panelSettings, children: [
4148
+ saveEndpoint ? /* @__PURE__ */ jsxs19(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: [
4149
+ /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
4006
4150
  "button",
4007
4151
  {
4008
4152
  type: "button",
@@ -4012,15 +4156,15 @@ function PanelApp({
4012
4156
  children: save.status === "saving" ? ui.saving : ui.save
4013
4157
  }
4014
4158
  ) }),
4015
- /* @__PURE__ */ jsxs18("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: [
4159
+ /* @__PURE__ */ jsxs19("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: [
4016
4160
  save.status === "error" ? `${ui.saveFailed}: ${save.message}` : save.status === "saved" ? ui.savedWithCommit : dirty ? ui.saveHelp : ui.upToDate,
4017
- save.status === "saved" && save.url && /* @__PURE__ */ jsxs18(Fragment5, { children: [
4161
+ save.status === "saved" && save.url && /* @__PURE__ */ jsxs19(Fragment6, { children: [
4018
4162
  " ",
4019
- /* @__PURE__ */ jsx20("a", { href: save.url, children: "commit" })
4163
+ /* @__PURE__ */ jsx21("a", { href: save.url, children: "commit" })
4020
4164
  ] })
4021
4165
  ] })
4022
- ] }) : /* @__PURE__ */ jsx20(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.demoNotice }) }),
4023
- showLanguage && /* @__PURE__ */ jsx20(DetailSection, { title: ui.language, subtitle: ui.languageSubtitle, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LANGS.map((code) => /* @__PURE__ */ jsx20(
4166
+ ] }) : /* @__PURE__ */ jsx21(DetailSection, { title: ui.saveSection, subtitle: ui.saveSubtitle, children: /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.demoNotice }) }),
4167
+ showLanguage && /* @__PURE__ */ jsx21(DetailSection, { title: ui.language, subtitle: ui.languageSubtitle, children: /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: LANGS.map((code) => /* @__PURE__ */ jsx21(
4024
4168
  FilterChip,
4025
4169
  {
4026
4170
  label: LANG_LABELS[code],
@@ -4029,9 +4173,9 @@ function PanelApp({
4029
4173
  },
4030
4174
  code
4031
4175
  )) }) }),
4032
- /* @__PURE__ */ jsxs18(DetailSection, { title: ui.theme, subtitle: ui.themeSubtitle, children: [
4033
- /* @__PURE__ */ jsxs18("div", { className: "pt-panel-row", children: [
4034
- Object.entries(themes).map(([name, entry]) => /* @__PURE__ */ jsx20(
4176
+ /* @__PURE__ */ jsxs19(DetailSection, { title: ui.theme, subtitle: ui.themeSubtitle, children: [
4177
+ /* @__PURE__ */ jsxs19("div", { className: "pt-panel-row", children: [
4178
+ Object.entries(themes).map(([name, entry]) => /* @__PURE__ */ jsx21(
4035
4179
  FilterChip,
4036
4180
  {
4037
4181
  label: entry.label,
@@ -4040,7 +4184,7 @@ function PanelApp({
4040
4184
  },
4041
4185
  name
4042
4186
  )),
4043
- state.importedTheme && /* @__PURE__ */ jsx20(
4187
+ state.importedTheme && /* @__PURE__ */ jsx21(
4044
4188
  FilterChip,
4045
4189
  {
4046
4190
  label: t(state.importedTheme.label),
@@ -4049,21 +4193,21 @@ function PanelApp({
4049
4193
  }
4050
4194
  )
4051
4195
  ] }),
4052
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: themeName === IMPORTED ? t(imported?.from.reasoning) : [chosen.note, ui.themeNote].filter(Boolean).join(". ") }),
4053
- state.importedTheme && /* @__PURE__ */ jsxs18("div", { className: "pt-cap pt-hud", style: { marginTop: 14 }, children: [
4054
- /* @__PURE__ */ jsx20("h3", { className: "pt-cap__title", children: ui.importedTheme }),
4055
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.importedFrom(state.importedTheme.importedAt, state.importedTheme.from.files.join(", ")) }),
4056
- 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)) }),
4057
- 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 }) }),
4058
- /* @__PURE__ */ jsx20("p", { className: "pt-marketplace__detail", children: ui.importedRefreshHow })
4196
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: themeName === IMPORTED ? t(imported?.from.reasoning) : [chosen.note, ui.themeNote].filter(Boolean).join(". ") }),
4197
+ state.importedTheme && /* @__PURE__ */ jsxs19("div", { className: "pt-cap pt-hud", style: { marginTop: 14 }, children: [
4198
+ /* @__PURE__ */ jsx21("h3", { className: "pt-cap__title", children: ui.importedTheme }),
4199
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.importedFrom(state.importedTheme.importedAt, state.importedTheme.from.files.join(", ")) }),
4200
+ 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)) }),
4201
+ 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 }) }),
4202
+ /* @__PURE__ */ jsx21("p", { className: "pt-marketplace__detail", children: ui.importedRefreshHow })
4059
4203
  ] })
4060
4204
  ] }),
4061
- checkForUpdates && fingerprint?.version && /* @__PURE__ */ jsxs18(DetailSection, { title: ui.updateTitle, subtitle: ui.updateSubtitle, children: [
4062
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.updateCurrent(fingerprint.version) }),
4063
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: !update ? ui.updateUnknown : update.behind ? ui.updateAvailable(update.latest) : ui.updateUpToDate }),
4064
- 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 }) })),
4065
- /* @__PURE__ */ jsxs18("label", { className: "pt-panel-row", style: { marginTop: 12 }, children: [
4066
- /* @__PURE__ */ jsx20(
4205
+ checkForUpdates && fingerprint?.version && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.updateTitle, subtitle: ui.updateSubtitle, children: [
4206
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", children: ui.updateCurrent(fingerprint.version) }),
4207
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: !update ? ui.updateUnknown : update.behind ? ui.updateAvailable(update.latest) : ui.updateUpToDate }),
4208
+ 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 }) })),
4209
+ /* @__PURE__ */ jsxs19("label", { className: "pt-panel-row", style: { marginTop: 12 }, children: [
4210
+ /* @__PURE__ */ jsx21(
4067
4211
  "input",
4068
4212
  {
4069
4213
  type: "checkbox",
@@ -4071,16 +4215,16 @@ function PanelApp({
4071
4215
  onChange: (event) => setPreference("updateAsOrder", event.target.checked)
4072
4216
  }
4073
4217
  ),
4074
- /* @__PURE__ */ jsx20("span", { className: "pt-panel-text", children: ui.updateAsOrder })
4218
+ /* @__PURE__ */ jsx21("span", { className: "pt-panel-text", children: ui.updateAsOrder })
4075
4219
  ] }),
4076
- /* @__PURE__ */ jsx20("p", { className: "pt-marketplace__detail", children: ui.updateAsOrderHow })
4220
+ /* @__PURE__ */ jsx21("p", { className: "pt-marketplace__detail", children: ui.updateAsOrderHow })
4077
4221
  ] }),
4078
- fingerprint && /* @__PURE__ */ jsxs18(DetailSection, { title: ui.fingerprint, subtitle: ui.fingerprintSubtitle, children: [
4079
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-mono", children: fingerprint.hash }),
4080
- /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: ui.trackedFiles(fingerprint.fileCount, fingerprint.version) })
4222
+ fingerprint && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.fingerprint, subtitle: ui.fingerprintSubtitle, children: [
4223
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-mono", children: fingerprint.hash }),
4224
+ /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 8 }, children: ui.trackedFiles(fingerprint.fileCount, fingerprint.version) })
4081
4225
  ] }),
4082
- saveEndpoint && /* @__PURE__ */ jsxs18(DetailSection, { title: ui.session, subtitle: ui.sessionSubtitle, children: [
4083
- /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx20(
4226
+ saveEndpoint && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.session, subtitle: ui.sessionSubtitle, children: [
4227
+ /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
4084
4228
  "button",
4085
4229
  {
4086
4230
  type: "button",
@@ -4090,11 +4234,11 @@ function PanelApp({
4090
4234
  children: signOut === "working" ? ui.signingOut : ui.signOut
4091
4235
  }
4092
4236
  ) }),
4093
- signOut === "failed" && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: ui.signOutFailed })
4237
+ signOut === "failed" && /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: ui.signOutFailed })
4094
4238
  ] }),
4095
- 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: [
4239
+ 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: [
4096
4240
  index > 0 && " \xB7 ",
4097
- /* @__PURE__ */ jsx20("a", { href: link.href, children: link.label })
4241
+ /* @__PURE__ */ jsx21("a", { href: link.href, children: link.label })
4098
4242
  ] }, link.href)) }) })
4099
4243
  ] }),
4100
4244
  footer
@@ -4263,6 +4407,7 @@ var CAPABILITIES = [
4263
4407
  ];
4264
4408
  export {
4265
4409
  ANALYSIS_SECTIONS,
4410
+ ARCHIVE_AFTER_DAYS,
4266
4411
  AlertBanner,
4267
4412
  AnalysisView,
4268
4413
  BOARD_VERSION,
@@ -4299,6 +4444,7 @@ export {
4299
4444
  PanelApp,
4300
4445
  SetupGuide,
4301
4446
  SetupWizard,
4447
+ SituationRow,
4302
4448
  StatTile,
4303
4449
  StatTileGrid,
4304
4450
  THEME_FORMS,
@@ -4316,6 +4462,7 @@ export {
4316
4462
  emptyCard,
4317
4463
  explainBoard,
4318
4464
  gateStatus,
4465
+ isArchived,
4319
4466
  isCard,
4320
4467
  isFirstRun,
4321
4468
  ledgerForm,
@@ -4345,6 +4492,7 @@ export {
4345
4492
  useGuideNote,
4346
4493
  useMediaQuery,
4347
4494
  validateBoard,
4495
+ warRoomForm,
4348
4496
  wizardStep,
4349
4497
  writeText
4350
4498
  };