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/CLAUDE_MD_SNIPPET.md +17 -1
- package/INSTALL.md +2 -2
- package/README.md +1 -1
- package/dist/index.d.ts +128 -2
- package/dist/index.js +651 -503
- package/dist/style.css +256 -0
- package/fingerprint.json +5 -5
- package/package.json +19 -26
- package/template/.claude/skills/panel/SKILL.md +23 -0
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var PANELTIR_VERSION = "0.
|
|
3
|
-
var PANELTIR_FINGERPRINT = "sha256:
|
|
4
|
-
var PANELTIR_FILE_COUNT =
|
|
5
|
-
var PANELTIR_TEMPLATE_HASH = "sha256:
|
|
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
|
|
294
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
249
295
|
function FilterChip({ label, count, active, onClick }) {
|
|
250
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
313
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
268
314
|
var BoardDndContext = createContext2(null);
|
|
269
315
|
function BoardDndProvider({ value, children }) {
|
|
270
|
-
return /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
285
|
-
/* @__PURE__ */
|
|
286
|
-
/* @__PURE__ */
|
|
287
|
-
/* @__PURE__ */
|
|
288
|
-
column.hint && /* @__PURE__ */
|
|
289
|
-
/* @__PURE__ */
|
|
290
|
-
onAddCard && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
305
|
-
showBefore && /* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
497
|
-
/* @__PURE__ */
|
|
498
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
517
|
-
/* @__PURE__ */
|
|
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__ */
|
|
574
|
+
/* @__PURE__ */ jsx11("div", { className: "pt-card__title", children: title })
|
|
528
575
|
] }),
|
|
529
|
-
tags && tags.length > 0 && /* @__PURE__ */
|
|
530
|
-
progress && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
577
|
-
/* @__PURE__ */
|
|
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__ */
|
|
583
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
651
|
-
/* @__PURE__ */
|
|
652
|
-
/* @__PURE__ */
|
|
653
|
-
step && /* @__PURE__ */
|
|
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__ */
|
|
660
|
-
/* @__PURE__ */
|
|
661
|
-
action && /* @__PURE__ */
|
|
662
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
763
|
-
/* @__PURE__ */
|
|
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__ */
|
|
774
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
787
|
-
count > 0 && /* @__PURE__ */
|
|
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__ */
|
|
792
|
-
/* @__PURE__ */
|
|
793
|
-
/* @__PURE__ */
|
|
794
|
-
count > 0 && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
816
|
-
/* @__PURE__ */
|
|
817
|
-
/* @__PURE__ */
|
|
818
|
-
item.detail && /* @__PURE__ */
|
|
819
|
-
item.at && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
872
|
-
/* @__PURE__ */
|
|
873
|
-
/* @__PURE__ */
|
|
874
|
-
label && /* @__PURE__ */
|
|
875
|
-
note && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
880
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
897
|
-
/* @__PURE__ */
|
|
898
|
-
/* @__PURE__ */
|
|
899
|
-
/* @__PURE__ */
|
|
900
|
-
/* @__PURE__ */
|
|
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__ */
|
|
949
|
+
/* @__PURE__ */ jsx16("span", { className: "pt-setup__state", children: text2[requirement.status] })
|
|
903
950
|
] }),
|
|
904
|
-
requirement.variable && /* @__PURE__ */
|
|
905
|
-
requirement.enables && /* @__PURE__ */
|
|
906
|
-
requirement.status !== "ok" && requirement.fix && /* @__PURE__ */
|
|
907
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
967
|
-
/* @__PURE__ */
|
|
968
|
-
/* @__PURE__ */
|
|
969
|
-
step.current && /* @__PURE__ */
|
|
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__ */
|
|
972
|
-
/* @__PURE__ */
|
|
973
|
-
/* @__PURE__ */
|
|
974
|
-
step.current.variable && /* @__PURE__ */
|
|
975
|
-
step.current.enables && /* @__PURE__ */
|
|
976
|
-
step.current.fix && /* @__PURE__ */
|
|
977
|
-
/* @__PURE__ */
|
|
978
|
-
/* @__PURE__ */
|
|
979
|
-
checked && !checking && /* @__PURE__ */
|
|
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__ */
|
|
982
|
-
/* @__PURE__ */
|
|
983
|
-
/* @__PURE__ */
|
|
984
|
-
/* @__PURE__ */
|
|
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__ */
|
|
987
|
-
/* @__PURE__ */
|
|
988
|
-
/* @__PURE__ */
|
|
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__ */
|
|
991
|
-
/* @__PURE__ */
|
|
992
|
-
/* @__PURE__ */
|
|
993
|
-
/* @__PURE__ */
|
|
994
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
2172
|
-
/* @__PURE__ */
|
|
2173
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2256
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-metric__unit", children: metric.unit })
|
|
2176
2257
|
] }),
|
|
2177
|
-
delta !== null && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2198
|
-
last && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2214
|
-
/* @__PURE__ */
|
|
2215
|
-
/* @__PURE__ */
|
|
2216
|
-
choice.why && /* @__PURE__ */
|
|
2217
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2227
|
-
answered && /* @__PURE__ */
|
|
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__ */
|
|
2247
|
-
/* @__PURE__ */
|
|
2248
|
-
/* @__PURE__ */
|
|
2249
|
-
choices.length === 0 ? /* @__PURE__ */
|
|
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__ */
|
|
2284
|
-
/* @__PURE__ */
|
|
2285
|
-
/* @__PURE__ */
|
|
2286
|
-
/* @__PURE__ */
|
|
2287
|
-
/* @__PURE__ */
|
|
2288
|
-
onRequestReport && /* @__PURE__ */
|
|
2289
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2389
|
+
here.length > 0 && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
|
|
2309
2390
|
ui.analysisAnswered(answeredHere, here.length),
|
|
2310
|
-
answeredHere === here.length && /* @__PURE__ */
|
|
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__ */
|
|
2317
|
-
/* @__PURE__ */
|
|
2318
|
-
/* @__PURE__ */
|
|
2319
|
-
/* @__PURE__ */
|
|
2320
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2326
|
-
/* @__PURE__ */
|
|
2327
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2330
|
-
/* @__PURE__ */
|
|
2331
|
-
/* @__PURE__ */
|
|
2332
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2415
|
+
facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
|
|
2335
2416
|
ui.factOldest,
|
|
2336
2417
|
": ",
|
|
2337
|
-
/* @__PURE__ */
|
|
2418
|
+
/* @__PURE__ */ jsx18("strong", { children: ui.factDays(facts.oldestOpenDays) }),
|
|
2338
2419
|
" \xB7 ",
|
|
2339
2420
|
t(facts.oldestOpen.title)
|
|
2340
2421
|
] })
|
|
2341
2422
|
] }),
|
|
2342
|
-
/* @__PURE__ */
|
|
2343
|
-
/* @__PURE__ */
|
|
2344
|
-
/* @__PURE__ */
|
|
2345
|
-
facts.claimed.length === 0 ? /* @__PURE__ */
|
|
2346
|
-
/* @__PURE__ */
|
|
2347
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2352
|
-
/* @__PURE__ */
|
|
2353
|
-
/* @__PURE__ */
|
|
2354
|
-
/* @__PURE__ */
|
|
2355
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2439
|
+
/* @__PURE__ */ jsx18("strong", { children: analysis.stage })
|
|
2359
2440
|
] })
|
|
2360
2441
|
] }),
|
|
2361
|
-
/* @__PURE__ */
|
|
2362
|
-
/* @__PURE__ */
|
|
2363
|
-
/* @__PURE__ */
|
|
2364
|
-
/* @__PURE__ */
|
|
2365
|
-
/* @__PURE__ */
|
|
2366
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2370
|
-
/* @__PURE__ */
|
|
2371
|
-
/* @__PURE__ */
|
|
2372
|
-
/* @__PURE__ */
|
|
2373
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2378
|
-
/* @__PURE__ */
|
|
2379
|
-
/* @__PURE__ */
|
|
2380
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2384
|
-
/* @__PURE__ */
|
|
2385
|
-
/* @__PURE__ */
|
|
2386
|
-
/* @__PURE__ */
|
|
2387
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2390
|
-
/* @__PURE__ */
|
|
2391
|
-
/* @__PURE__ */
|
|
2392
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2397
|
-
/* @__PURE__ */
|
|
2398
|
-
/* @__PURE__ */
|
|
2399
|
-
/* @__PURE__ */
|
|
2400
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2404
|
-
/* @__PURE__ */
|
|
2405
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2417
|
-
/* @__PURE__ */
|
|
2418
|
-
/* @__PURE__ */
|
|
2419
|
-
/* @__PURE__ */
|
|
2420
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2428
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2441
|
-
/* @__PURE__ */
|
|
2442
|
-
/* @__PURE__ */
|
|
2443
|
-
/* @__PURE__ */
|
|
2444
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2447
|
-
/* @__PURE__ */
|
|
2448
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2452
|
-
/* @__PURE__ */
|
|
2453
|
-
/* @__PURE__ */
|
|
2454
|
-
/* @__PURE__ */
|
|
2455
|
-
/* @__PURE__ */
|
|
2456
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2460
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2465
|
-
/* @__PURE__ */
|
|
2466
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2469
|
-
/* @__PURE__ */
|
|
2470
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2473
|
-
/* @__PURE__ */
|
|
2474
|
-
total > 0 && /* @__PURE__ */
|
|
2475
|
-
/* @__PURE__ */
|
|
2476
|
-
/* @__PURE__ */
|
|
2477
|
-
/* @__PURE__ */
|
|
2478
|
-
/* @__PURE__ */
|
|
2479
|
-
answers.map(({ section: from, choice, option }) => /* @__PURE__ */
|
|
2480
|
-
/* @__PURE__ */
|
|
2481
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2565
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: t(option.label) })
|
|
2485
2566
|
] }, choice.id)),
|
|
2486
|
-
answers.length === 0 && /* @__PURE__ */
|
|
2567
|
+
answers.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.choicesNone })
|
|
2487
2568
|
] })
|
|
2488
2569
|
] }),
|
|
2489
|
-
/* @__PURE__ */
|
|
2490
|
-
/* @__PURE__ */
|
|
2491
|
-
/* @__PURE__ */
|
|
2492
|
-
/* @__PURE__ */
|
|
2493
|
-
open.map(({ section: from, choice }) => /* @__PURE__ */
|
|
2494
|
-
/* @__PURE__ */
|
|
2495
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2579
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.choiceOpen })
|
|
2499
2580
|
] }, choice.id)),
|
|
2500
|
-
open.length === 0 && /* @__PURE__ */
|
|
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
|
|
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__ */
|
|
2559
|
-
/* @__PURE__ */
|
|
2560
|
-
/* @__PURE__ */
|
|
2561
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2564
|
-
/* @__PURE__ */
|
|
2565
|
-
/* @__PURE__ */
|
|
2566
|
-
tool.claudePlugin && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2658
|
+
tool.repo && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2578
2659
|
" \xB7 ",
|
|
2579
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2583
|
-
!tool.claudePlugin && tool.standaloneCommand && /* @__PURE__ */
|
|
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__ */
|
|
2592
|
-
/* @__PURE__ */
|
|
2593
|
-
tool.homepage && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2618
|
-
/* @__PURE__ */
|
|
2619
|
-
/* @__PURE__ */
|
|
2620
|
-
/* @__PURE__ */
|
|
2621
|
-
/* @__PURE__ */
|
|
2622
|
-
/* @__PURE__ */
|
|
2623
|
-
onRefresh && /* @__PURE__ */
|
|
2624
|
-
report && onRefresh && /* @__PURE__ */
|
|
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__ */
|
|
2627
|
-
report?.unavailable && /* @__PURE__ */
|
|
2628
|
-
failure && /* @__PURE__ */
|
|
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__ */
|
|
2631
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2714
|
+
report.project.settingsStatus === "absent" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2634
2715
|
" \xB7 ",
|
|
2635
2716
|
ui.settingsAbsent
|
|
2636
2717
|
] }),
|
|
2637
|
-
report.project.settingsStatus === "unreadable" && /* @__PURE__ */
|
|
2718
|
+
report.project.settingsStatus === "unreadable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2638
2719
|
" \xB7 ",
|
|
2639
2720
|
ui.settingsUnreadable
|
|
2640
2721
|
] }),
|
|
2641
|
-
report.project.settingsStatus === "unparseable" && /* @__PURE__ */
|
|
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__ */
|
|
2647
|
-
/* @__PURE__ */
|
|
2648
|
-
/* @__PURE__ */
|
|
2649
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2680
|
-
/* @__PURE__ */
|
|
2681
|
-
/* @__PURE__ */
|
|
2682
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2703
|
-
tool.claudePlugin ? /* @__PURE__ */
|
|
2704
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2714
|
-
] }) : /* @__PURE__ */
|
|
2715
|
-
tool.standaloneCommand ? /* @__PURE__ */
|
|
2716
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
2750
|
-
/* @__PURE__ */
|
|
2751
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2841
|
+
untranslated(card.title) && /* @__PURE__ */ jsx20("span", { className: "pt-flag", children: ui.untranslatedBadge })
|
|
2761
2842
|
] }),
|
|
2762
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
2809
|
-
/* @__PURE__ */
|
|
2810
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2813
|
-
/* @__PURE__ */
|
|
2814
|
-
/* @__PURE__ */
|
|
2815
|
-
INTENTS.map((intent) => /* @__PURE__ */
|
|
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__ */
|
|
2906
|
+
card.intent && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text pt-meaning", children: INTENT_COPY[card.intent].meaning[lang] })
|
|
2826
2907
|
] }),
|
|
2827
|
-
/* @__PURE__ */
|
|
2828
|
-
card.checks.length > 0 && /* @__PURE__ */
|
|
2829
|
-
/* @__PURE__ */
|
|
2830
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2923
|
+
/* @__PURE__ */ jsx20("span", { className: check.done ? "is-done" : void 0, children: text(check.text, lang) })
|
|
2843
2924
|
] }),
|
|
2844
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2856
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2875
|
-
card.notes.map((entry) => /* @__PURE__ */
|
|
2876
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2962
|
+
/* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: text(entry.text, lang) })
|
|
2882
2963
|
] }, entry.id)),
|
|
2883
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2974
|
+
/* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addNote, children: ui.leaveNote })
|
|
2894
2975
|
] }),
|
|
2895
|
-
/* @__PURE__ */
|
|
2896
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
2993
|
+
claimedWithoutStarting(card) && /* @__PURE__ */ jsx20("p", { className: "pt-warn", children: ui.neverStarted })
|
|
2913
2994
|
] }),
|
|
2914
|
-
/* @__PURE__ */
|
|
2915
|
-
/* @__PURE__ */
|
|
2916
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
3079
|
-
/* @__PURE__ */
|
|
3080
|
-
/* @__PURE__ */
|
|
3081
|
-
/* @__PURE__ */
|
|
3082
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3119
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3625
|
+
return /* @__PURE__ */ jsxs19(DashboardThemeProvider, { tokens: theme, form, className, children: [
|
|
3535
3626
|
typeof decoration === "function" ? decoration(themeName) : decoration,
|
|
3536
|
-
/* @__PURE__ */
|
|
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__ */
|
|
3634
|
+
brand ?? /* @__PURE__ */ jsx21("span", { className: "pt-panel-brand", children: state.project })
|
|
3544
3635
|
),
|
|
3545
3636
|
status,
|
|
3546
|
-
controls: /* @__PURE__ */
|
|
3547
|
-
(initialState.analysis || hasMarketplace ||
|
|
3548
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3615
|
-
saveEndpoint && (dirty || save.status === "saving") && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3640
|
-
saveEndpoint && setup && !setup.ready && !setup.unknown && !wizardOpen && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3751
|
-
/* @__PURE__ */
|
|
3752
|
-
/* @__PURE__ */
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
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__ */
|
|
3761
|
-
|
|
3762
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3826
|
-
/* @__PURE__ */
|
|
3827
|
-
/* @__PURE__ */
|
|
3828
|
-
/* @__PURE__ */
|
|
3829
|
-
/* @__PURE__ */
|
|
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__ */
|
|
3832
|
-
/* @__PURE__ */
|
|
3833
|
-
/* @__PURE__ */
|
|
3834
|
-
/* @__PURE__ */
|
|
3835
|
-
capability.code && /* @__PURE__ */
|
|
3836
|
-
/* @__PURE__ */
|
|
3837
|
-
/* @__PURE__ */
|
|
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" &&
|
|
3843
|
-
/* @__PURE__ */
|
|
3844
|
-
/* @__PURE__ */
|
|
3845
|
-
|
|
3846
|
-
|
|
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__ */
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
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.
|
|
3863
|
-
|
|
3864
|
-
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3923
|
-
/* @__PURE__ */
|
|
3924
|
-
/* @__PURE__ */
|
|
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__ */
|
|
3938
|
-
!setup.ready && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3977
|
-
/* @__PURE__ */
|
|
3978
|
-
/* @__PURE__ */
|
|
3979
|
-
update.notes?.date && /* @__PURE__ */
|
|
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__ */
|
|
3982
|
-
/* @__PURE__ */
|
|
3983
|
-
/* @__PURE__ */
|
|
3984
|
-
] }, index)) }) : /* @__PURE__ */
|
|
3985
|
-
/* @__PURE__ */
|
|
3986
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4004
|
-
saveEndpoint ? /* @__PURE__ */
|
|
4005
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4161
|
+
save.status === "saved" && save.url && /* @__PURE__ */ jsxs19(Fragment6, { children: [
|
|
4018
4162
|
" ",
|
|
4019
|
-
/* @__PURE__ */
|
|
4163
|
+
/* @__PURE__ */ jsx21("a", { href: save.url, children: "commit" })
|
|
4020
4164
|
] })
|
|
4021
4165
|
] })
|
|
4022
|
-
] }) : /* @__PURE__ */
|
|
4023
|
-
showLanguage && /* @__PURE__ */
|
|
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__ */
|
|
4033
|
-
/* @__PURE__ */
|
|
4034
|
-
Object.entries(themes).map(([name, entry]) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
4053
|
-
state.importedTheme && /* @__PURE__ */
|
|
4054
|
-
/* @__PURE__ */
|
|
4055
|
-
/* @__PURE__ */
|
|
4056
|
-
state.importedTheme.from.colours.length > 0 && /* @__PURE__ */
|
|
4057
|
-
state.importedTheme.refreshRequested ? /* @__PURE__ */
|
|
4058
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4062
|
-
/* @__PURE__ */
|
|
4063
|
-
/* @__PURE__ */
|
|
4064
|
-
update?.behind && (state.cards.some((card) => card.id === updateCardId(update.latest)) ? /* @__PURE__ */
|
|
4065
|
-
/* @__PURE__ */
|
|
4066
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4218
|
+
/* @__PURE__ */ jsx21("span", { className: "pt-panel-text", children: ui.updateAsOrder })
|
|
4075
4219
|
] }),
|
|
4076
|
-
/* @__PURE__ */
|
|
4220
|
+
/* @__PURE__ */ jsx21("p", { className: "pt-marketplace__detail", children: ui.updateAsOrderHow })
|
|
4077
4221
|
] }),
|
|
4078
|
-
fingerprint && /* @__PURE__ */
|
|
4079
|
-
/* @__PURE__ */
|
|
4080
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4083
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4237
|
+
signOut === "failed" && /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: ui.signOutFailed })
|
|
4094
4238
|
] }),
|
|
4095
|
-
links && links.length > 0 && /* @__PURE__ */
|
|
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__ */
|
|
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
|
};
|