paneltir 0.11.0 → 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 +98 -9
- package/dist/index.js +642 -534
- package/dist/style.css +234 -0
- package/fingerprint.json +5 -5
- package/package.json +30 -9
- 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,16 +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__ */
|
|
310
|
-
column.footer ? /* @__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
|
|
311
357
|
] })
|
|
312
358
|
] });
|
|
313
359
|
}
|
|
@@ -490,22 +536,22 @@ function useBoardDnD({ columns, onMove, scrollContainerRef }) {
|
|
|
490
536
|
}
|
|
491
537
|
|
|
492
538
|
// src/components/Board/Board.tsx
|
|
493
|
-
import { jsx as
|
|
539
|
+
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
494
540
|
function Board({ columns, renderCard, onMove, onAddCard }) {
|
|
495
541
|
const scrollRef = useRef3(null);
|
|
496
542
|
const dnd = useBoardDnD({ columns, onMove, scrollContainerRef: scrollRef });
|
|
497
|
-
return /* @__PURE__ */
|
|
498
|
-
/* @__PURE__ */
|
|
499
|
-
/* @__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 })
|
|
500
546
|
] });
|
|
501
547
|
}
|
|
502
548
|
|
|
503
549
|
// src/components/Board/Card.tsx
|
|
504
|
-
import { jsx as
|
|
550
|
+
import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
505
551
|
function Card({ cardId, columnId, index, title, priorityColor, tags, progress, children, onClick }) {
|
|
506
552
|
const dnd = useBoardDnDContext();
|
|
507
553
|
const isDraggedSource = dnd.drag?.cardId === cardId;
|
|
508
|
-
return /* @__PURE__ */
|
|
554
|
+
return /* @__PURE__ */ jsxs9(
|
|
509
555
|
"div",
|
|
510
556
|
{
|
|
511
557
|
className: `pt-card${isDraggedSource ? " pt-card--dragging-source" : ""}`,
|
|
@@ -514,8 +560,8 @@ function Card({ cardId, columnId, index, title, priorityColor, tags, progress, c
|
|
|
514
560
|
style: priorityColor ? { "--pt-card-stripe": priorityColor } : void 0,
|
|
515
561
|
onClick,
|
|
516
562
|
children: [
|
|
517
|
-
/* @__PURE__ */
|
|
518
|
-
/* @__PURE__ */
|
|
563
|
+
/* @__PURE__ */ jsxs9("div", { className: "pt-card__row", children: [
|
|
564
|
+
/* @__PURE__ */ jsx11(
|
|
519
565
|
"button",
|
|
520
566
|
{
|
|
521
567
|
type: "button",
|
|
@@ -525,10 +571,10 @@ function Card({ cardId, columnId, index, title, priorityColor, tags, progress, c
|
|
|
525
571
|
children: "\u283F"
|
|
526
572
|
}
|
|
527
573
|
),
|
|
528
|
-
/* @__PURE__ */
|
|
574
|
+
/* @__PURE__ */ jsx11("div", { className: "pt-card__title", children: title })
|
|
529
575
|
] }),
|
|
530
|
-
tags && tags.length > 0 && /* @__PURE__ */
|
|
531
|
-
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: [
|
|
532
578
|
progress.done,
|
|
533
579
|
"/",
|
|
534
580
|
progress.total
|
|
@@ -563,7 +609,7 @@ function moveCardInColumns(columns, move) {
|
|
|
563
609
|
|
|
564
610
|
// src/components/DetailSheet/DetailSheet.tsx
|
|
565
611
|
import { useEffect as useEffect3 } from "react";
|
|
566
|
-
import { jsx as
|
|
612
|
+
import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
567
613
|
function DetailSheet({ open, onClose, children, ariaLabel }) {
|
|
568
614
|
useEffect3(() => {
|
|
569
615
|
if (!open) return;
|
|
@@ -574,16 +620,16 @@ function DetailSheet({ open, onClose, children, ariaLabel }) {
|
|
|
574
620
|
return () => window.removeEventListener("keydown", handleKey);
|
|
575
621
|
}, [open, onClose]);
|
|
576
622
|
if (!open) return null;
|
|
577
|
-
return /* @__PURE__ */
|
|
578
|
-
/* @__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" }),
|
|
579
625
|
children
|
|
580
626
|
] }) });
|
|
581
627
|
}
|
|
582
628
|
function DetailSection({ title, subtitle, children }) {
|
|
583
|
-
return /* @__PURE__ */
|
|
584
|
-
/* @__PURE__ */
|
|
629
|
+
return /* @__PURE__ */ jsxs10("section", { className: "pt-detail-section", children: [
|
|
630
|
+
/* @__PURE__ */ jsxs10("h3", { className: "pt-detail-section__title", children: [
|
|
585
631
|
title,
|
|
586
|
-
subtitle && /* @__PURE__ */
|
|
632
|
+
subtitle && /* @__PURE__ */ jsxs10("span", { className: "pt-detail-section__subtitle", children: [
|
|
587
633
|
" \u2014 ",
|
|
588
634
|
subtitle
|
|
589
635
|
] })
|
|
@@ -594,7 +640,7 @@ function DetailSection({ title, subtitle, children }) {
|
|
|
594
640
|
|
|
595
641
|
// src/components/Guide/Guide.tsx
|
|
596
642
|
import { useCallback as useCallback2, useEffect as useEffect4, useState as useState2 } from "react";
|
|
597
|
-
import { jsx as
|
|
643
|
+
import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
598
644
|
import { createElement } from "react";
|
|
599
645
|
var STORE_PREFIX = "pt-guide:";
|
|
600
646
|
function readDismissed(key) {
|
|
@@ -648,19 +694,19 @@ function GuideNote({
|
|
|
648
694
|
dismiss();
|
|
649
695
|
onDismissed?.();
|
|
650
696
|
};
|
|
651
|
-
return /* @__PURE__ */
|
|
652
|
-
/* @__PURE__ */
|
|
653
|
-
/* @__PURE__ */
|
|
654
|
-
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: [
|
|
655
701
|
step.index,
|
|
656
702
|
"/",
|
|
657
703
|
step.total
|
|
658
704
|
] })
|
|
659
705
|
] }),
|
|
660
|
-
/* @__PURE__ */
|
|
661
|
-
/* @__PURE__ */
|
|
662
|
-
action && /* @__PURE__ */
|
|
663
|
-
/* @__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 })
|
|
664
710
|
] })
|
|
665
711
|
] });
|
|
666
712
|
}
|
|
@@ -694,7 +740,7 @@ function GuideTour({ notes, dismissed, onDismiss }) {
|
|
|
694
740
|
|
|
695
741
|
// src/components/Notifications/Notifications.tsx
|
|
696
742
|
import { useCallback as useCallback3, useEffect as useEffect5, useMemo as useMemo2, useRef as useRef4, useState as useState3 } from "react";
|
|
697
|
-
import { jsx as
|
|
743
|
+
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
698
744
|
var STORE_KEY = "pt-seen";
|
|
699
745
|
function readSeen() {
|
|
700
746
|
try {
|
|
@@ -760,8 +806,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
|
|
|
760
806
|
);
|
|
761
807
|
if (!seen) return null;
|
|
762
808
|
const count = unread.length;
|
|
763
|
-
return /* @__PURE__ */
|
|
764
|
-
/* @__PURE__ */
|
|
809
|
+
return /* @__PURE__ */ jsxs12("div", { className: "pt-bell", ref: root, children: [
|
|
810
|
+
/* @__PURE__ */ jsxs12(
|
|
765
811
|
"button",
|
|
766
812
|
{
|
|
767
813
|
type: "button",
|
|
@@ -771,8 +817,8 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
|
|
|
771
817
|
title: count ? `${text2.title} \u2014 ${text2.unread(count)}` : text2.title,
|
|
772
818
|
onClick: () => setOpen((v) => !v),
|
|
773
819
|
children: [
|
|
774
|
-
/* @__PURE__ */
|
|
775
|
-
/* @__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(
|
|
776
822
|
"path",
|
|
777
823
|
{
|
|
778
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",
|
|
@@ -782,17 +828,17 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
|
|
|
782
828
|
strokeLinejoin: "round"
|
|
783
829
|
}
|
|
784
830
|
),
|
|
785
|
-
/* @__PURE__ */
|
|
831
|
+
/* @__PURE__ */ jsx14("path", { d: "M6.5 12a1.5 1.5 0 0 0 3 0", fill: "none", stroke: "currentColor", strokeWidth: "1.3" })
|
|
786
832
|
] }) }),
|
|
787
|
-
/* @__PURE__ */
|
|
788
|
-
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 })
|
|
789
835
|
]
|
|
790
836
|
}
|
|
791
837
|
),
|
|
792
|
-
open && /* @__PURE__ */
|
|
793
|
-
/* @__PURE__ */
|
|
794
|
-
/* @__PURE__ */
|
|
795
|
-
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(
|
|
796
842
|
"button",
|
|
797
843
|
{
|
|
798
844
|
type: "button",
|
|
@@ -802,7 +848,7 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
|
|
|
802
848
|
}
|
|
803
849
|
)
|
|
804
850
|
] }),
|
|
805
|
-
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(
|
|
806
852
|
"button",
|
|
807
853
|
{
|
|
808
854
|
type: "button",
|
|
@@ -813,11 +859,11 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
|
|
|
813
859
|
if (item.onOpen) setOpen(false);
|
|
814
860
|
},
|
|
815
861
|
children: [
|
|
816
|
-
/* @__PURE__ */
|
|
817
|
-
/* @__PURE__ */
|
|
818
|
-
/* @__PURE__ */
|
|
819
|
-
item.detail && /* @__PURE__ */
|
|
820
|
-
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 })
|
|
821
867
|
] })
|
|
822
868
|
]
|
|
823
869
|
}
|
|
@@ -828,7 +874,7 @@ function NotificationBell({ notifications, labels, seen: given, onSeen }) {
|
|
|
828
874
|
|
|
829
875
|
// src/components/CopyBlock/CopyBlock.tsx
|
|
830
876
|
import { useCallback as useCallback4, useEffect as useEffect6, useRef as useRef5, useState as useState4 } from "react";
|
|
831
|
-
import { jsx as
|
|
877
|
+
import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
832
878
|
var DEFAULT_LABELS2 = {
|
|
833
879
|
copy: "Copy",
|
|
834
880
|
copied: "Copied",
|
|
@@ -869,21 +915,21 @@ function CopyBlock({ text: text2, label, note, labels }) {
|
|
|
869
915
|
}
|
|
870
916
|
if (select()) announce("selected");
|
|
871
917
|
}, [announce, select, text2]);
|
|
872
|
-
return /* @__PURE__ */
|
|
873
|
-
/* @__PURE__ */
|
|
874
|
-
/* @__PURE__ */
|
|
875
|
-
label && /* @__PURE__ */
|
|
876
|
-
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 })
|
|
877
923
|
] }),
|
|
878
|
-
/* @__PURE__ */
|
|
924
|
+
/* @__PURE__ */ jsx15("button", { type: "button", className: "pt-copy__button", onClick: copy, children: result === "copied" ? words.copied : result === "selected" ? words.selected : words.copy })
|
|
879
925
|
] }),
|
|
880
|
-
/* @__PURE__ */
|
|
881
|
-
/* @__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 : "" })
|
|
882
928
|
] });
|
|
883
929
|
}
|
|
884
930
|
|
|
885
931
|
// src/components/Setup/SetupGuide.tsx
|
|
886
|
-
import { jsx as
|
|
932
|
+
import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
887
933
|
var DEFAULT_LABELS3 = {
|
|
888
934
|
ok: "in place",
|
|
889
935
|
missing: "not set",
|
|
@@ -894,23 +940,23 @@ function SetupGuide({ requirements, readyMessage, labels }) {
|
|
|
894
940
|
const text2 = { ...DEFAULT_LABELS3, ...labels };
|
|
895
941
|
const missing = requirements.filter((r) => r.status === "missing");
|
|
896
942
|
const allOk = requirements.length > 0 && missing.length === 0;
|
|
897
|
-
return /* @__PURE__ */
|
|
898
|
-
/* @__PURE__ */
|
|
899
|
-
/* @__PURE__ */
|
|
900
|
-
/* @__PURE__ */
|
|
901
|
-
/* @__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: [
|
|
902
948
|
requirement.label,
|
|
903
|
-
/* @__PURE__ */
|
|
949
|
+
/* @__PURE__ */ jsx16("span", { className: "pt-setup__state", children: text2[requirement.status] })
|
|
904
950
|
] }),
|
|
905
|
-
requirement.variable && /* @__PURE__ */
|
|
906
|
-
requirement.enables && /* @__PURE__ */
|
|
907
|
-
requirement.status !== "ok" && requirement.fix && /* @__PURE__ */
|
|
908
|
-
/* @__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 }),
|
|
909
955
|
requirement.fix
|
|
910
956
|
] })
|
|
911
957
|
] })
|
|
912
958
|
] }, requirement.id)) }),
|
|
913
|
-
allOk && readyMessage && /* @__PURE__ */
|
|
959
|
+
allOk && readyMessage && /* @__PURE__ */ jsx16("p", { className: "pt-setup__ready", children: readyMessage })
|
|
914
960
|
] });
|
|
915
961
|
}
|
|
916
962
|
|
|
@@ -941,7 +987,7 @@ function isFirstRun(board) {
|
|
|
941
987
|
}
|
|
942
988
|
|
|
943
989
|
// src/components/Setup/SetupWizard.tsx
|
|
944
|
-
import { jsx as
|
|
990
|
+
import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
945
991
|
function SetupWizard({ requirements, labels, onCheck, onClose }) {
|
|
946
992
|
const step = wizardStep(requirements);
|
|
947
993
|
const [checking, setChecking] = useState5(false);
|
|
@@ -964,37 +1010,37 @@ function SetupWizard({ requirements, labels, onCheck, onClose }) {
|
|
|
964
1010
|
} catch {
|
|
965
1011
|
}
|
|
966
1012
|
}
|
|
967
|
-
return /* @__PURE__ */
|
|
968
|
-
/* @__PURE__ */
|
|
969
|
-
/* @__PURE__ */
|
|
970
|
-
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) })
|
|
971
1017
|
] }),
|
|
972
|
-
step.current ? /* @__PURE__ */
|
|
973
|
-
/* @__PURE__ */
|
|
974
|
-
/* @__PURE__ */
|
|
975
|
-
step.current.variable && /* @__PURE__ */
|
|
976
|
-
step.current.enables && /* @__PURE__ */
|
|
977
|
-
step.current.fix && /* @__PURE__ */
|
|
978
|
-
/* @__PURE__ */
|
|
979
|
-
/* @__PURE__ */
|
|
980
|
-
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 })
|
|
981
1027
|
] })
|
|
982
|
-
] }) : /* @__PURE__ */
|
|
983
|
-
/* @__PURE__ */
|
|
984
|
-
/* @__PURE__ */
|
|
985
|
-
/* @__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)) })
|
|
986
1032
|
] }),
|
|
987
|
-
step.done.length > 0 && /* @__PURE__ */
|
|
988
|
-
/* @__PURE__ */
|
|
989
|
-
/* @__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)) })
|
|
990
1036
|
] }),
|
|
991
|
-
/* @__PURE__ */
|
|
992
|
-
/* @__PURE__ */
|
|
993
|
-
/* @__PURE__ */
|
|
994
|
-
/* @__PURE__ */
|
|
995
|
-
/* @__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 })
|
|
996
1042
|
] }),
|
|
997
|
-
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 }) })
|
|
998
1044
|
] });
|
|
999
1045
|
}
|
|
1000
1046
|
|
|
@@ -1592,12 +1638,19 @@ var UI = {
|
|
|
1592
1638
|
filterForClaude: "For Claude",
|
|
1593
1639
|
filterYours: "Waiting on you",
|
|
1594
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",
|
|
1595
1647
|
statOpen: "Open",
|
|
1596
1648
|
statOrders: "Orders",
|
|
1597
1649
|
statYours: "For you",
|
|
1598
1650
|
statDecisions: "Decisions",
|
|
1599
1651
|
statHighRisk: "High risk",
|
|
1600
1652
|
statDone: "Done",
|
|
1653
|
+
statArchived: "Archived",
|
|
1601
1654
|
theme: "Theme",
|
|
1602
1655
|
themeSubtitle: "the only thing that changes between projects",
|
|
1603
1656
|
themeNote: "The structure does not move: only the palette handed to the theme provider changes.",
|
|
@@ -1628,9 +1681,10 @@ var UI = {
|
|
|
1628
1681
|
needTokenEnables: "Lets Save commit the board back to the repository. Without it everything else works and Save fails.",
|
|
1629
1682
|
needRepo: "The repository to write to",
|
|
1630
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.",
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
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}`,
|
|
1634
1688
|
needGate: "The gate this project copied",
|
|
1635
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.",
|
|
1636
1690
|
fixGate: "The gate is older than the installed kit. See what changed before replacing anything:",
|
|
@@ -1919,12 +1973,19 @@ var UI = {
|
|
|
1919
1973
|
filterForClaude: "Para Claude",
|
|
1920
1974
|
filterYours: "Depende de ti",
|
|
1921
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",
|
|
1922
1982
|
statOpen: "Abiertas",
|
|
1923
1983
|
statOrders: "\xD3rdenes",
|
|
1924
1984
|
statYours: "Para ti",
|
|
1925
1985
|
statDecisions: "Decisiones",
|
|
1926
1986
|
statHighRisk: "Riesgo alto",
|
|
1927
1987
|
statDone: "Hecho",
|
|
1988
|
+
statArchived: "Archivadas",
|
|
1928
1989
|
theme: "Tema",
|
|
1929
1990
|
themeSubtitle: "lo \xFAnico que cambia entre proyectos",
|
|
1930
1991
|
themeNote: "La estructura no se mueve: cambia solo la paleta que recibe el proveedor de tema.",
|
|
@@ -1955,9 +2016,10 @@ var UI = {
|
|
|
1955
2016
|
needTokenEnables: "Permite que Guardar confirme el tablero en el repositorio. Sin \xE9l todo lo dem\xE1s funciona y Guardar falla.",
|
|
1956
2017
|
needRepo: "El repositorio donde escribir",
|
|
1957
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.",
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
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}`,
|
|
1961
2023
|
needGate: "La puerta que copi\xF3 este proyecto",
|
|
1962
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.",
|
|
1963
2025
|
fixGate: "La puerta es m\xE1s vieja que el kit instalado. Mira qu\xE9 cambi\xF3 antes de reemplazar nada:",
|
|
@@ -2178,7 +2240,7 @@ var UI = {
|
|
|
2178
2240
|
};
|
|
2179
2241
|
|
|
2180
2242
|
// src/panel/AnalysisView.tsx
|
|
2181
|
-
import { Fragment as
|
|
2243
|
+
import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2182
2244
|
var SUGGESTION_STATUSES = ["new", "doing", "done", "dismissed"];
|
|
2183
2245
|
function MetricTile({ metric, lang, ui }) {
|
|
2184
2246
|
const { latest, delta, against } = trendOf(metric);
|
|
@@ -2187,23 +2249,23 @@ function MetricTile({ metric, lang, ui }) {
|
|
|
2187
2249
|
const height = 34;
|
|
2188
2250
|
const path = points.map((point) => `${(point.x * width).toFixed(1)},${(point.y * (height - 6) + 3).toFixed(1)}`);
|
|
2189
2251
|
const last = points[points.length - 1];
|
|
2190
|
-
return /* @__PURE__ */
|
|
2191
|
-
/* @__PURE__ */
|
|
2192
|
-
/* @__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: [
|
|
2193
2255
|
latest ? latest.value : "\u2014",
|
|
2194
|
-
/* @__PURE__ */
|
|
2256
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-metric__unit", children: metric.unit })
|
|
2195
2257
|
] }),
|
|
2196
|
-
delta !== null && /* @__PURE__ */
|
|
2258
|
+
delta !== null && /* @__PURE__ */ jsxs16("p", { className: `pt-metric__delta${against ? " is-against" : " is-with"}`, children: [
|
|
2197
2259
|
delta > 0 ? "\u25B2" : delta < 0 ? "\u25BC" : "\u25A0",
|
|
2198
2260
|
" ",
|
|
2199
2261
|
delta > 0 ? "+" : "",
|
|
2200
2262
|
delta,
|
|
2201
|
-
/* @__PURE__ */
|
|
2263
|
+
/* @__PURE__ */ jsxs16("span", { className: "pt-metric__since", children: [
|
|
2202
2264
|
" \xB7 ",
|
|
2203
2265
|
against ? ui.metricAgainst : ui.metricWith
|
|
2204
2266
|
] })
|
|
2205
2267
|
] }),
|
|
2206
|
-
points.length > 1 && /* @__PURE__ */
|
|
2268
|
+
points.length > 1 && /* @__PURE__ */ jsxs16(
|
|
2207
2269
|
"svg",
|
|
2208
2270
|
{
|
|
2209
2271
|
className: "pt-metric__spark",
|
|
@@ -2213,12 +2275,12 @@ function MetricTile({ metric, lang, ui }) {
|
|
|
2213
2275
|
role: "img",
|
|
2214
2276
|
"aria-label": `${text(metric.label, lang)}: ${metric.readings.map((r) => `${r.date} ${r.value}`).join(", ")}`,
|
|
2215
2277
|
children: [
|
|
2216
|
-
/* @__PURE__ */
|
|
2217
|
-
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" })
|
|
2218
2280
|
]
|
|
2219
2281
|
}
|
|
2220
2282
|
),
|
|
2221
|
-
latest?.note && /* @__PURE__ */
|
|
2283
|
+
latest?.note && /* @__PURE__ */ jsx18("p", { className: "pt-metric__note", children: text(latest.note, lang) })
|
|
2222
2284
|
] });
|
|
2223
2285
|
}
|
|
2224
2286
|
function ChoiceCard({
|
|
@@ -2229,11 +2291,11 @@ function ChoiceCard({
|
|
|
2229
2291
|
onDecide
|
|
2230
2292
|
}) {
|
|
2231
2293
|
const answered = choice.options.find((option) => option.id === choice.value);
|
|
2232
|
-
return /* @__PURE__ */
|
|
2233
|
-
/* @__PURE__ */
|
|
2234
|
-
/* @__PURE__ */
|
|
2235
|
-
choice.why && /* @__PURE__ */
|
|
2236
|
-
/* @__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(
|
|
2237
2299
|
FilterChip,
|
|
2238
2300
|
{
|
|
2239
2301
|
label: text(option.label, lang),
|
|
@@ -2242,8 +2304,8 @@ function ChoiceCard({
|
|
|
2242
2304
|
},
|
|
2243
2305
|
option.id
|
|
2244
2306
|
)) }),
|
|
2245
|
-
answered?.detail && /* @__PURE__ */
|
|
2246
|
-
answered && /* @__PURE__ */
|
|
2307
|
+
answered?.detail && /* @__PURE__ */ jsx18("p", { className: "pt-choice__detail", children: text(answered.detail, lang) }),
|
|
2308
|
+
answered && /* @__PURE__ */ jsx18(
|
|
2247
2309
|
"button",
|
|
2248
2310
|
{
|
|
2249
2311
|
type: "button",
|
|
@@ -2262,10 +2324,10 @@ function Choices({
|
|
|
2262
2324
|
onDecide
|
|
2263
2325
|
}) {
|
|
2264
2326
|
const choices = analysis.choices?.[section] ?? [];
|
|
2265
|
-
return /* @__PURE__ */
|
|
2266
|
-
/* @__PURE__ */
|
|
2267
|
-
/* @__PURE__ */
|
|
2268
|
-
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(
|
|
2269
2331
|
ChoiceCard,
|
|
2270
2332
|
{
|
|
2271
2333
|
section,
|
|
@@ -2299,17 +2361,17 @@ function AnalysisView({
|
|
|
2299
2361
|
const total = answers.length + open.length;
|
|
2300
2362
|
const here = analysis.choices?.[section] ?? [];
|
|
2301
2363
|
const answeredHere = here.filter((choice) => choice.options.some((option) => option.id === choice.value)).length;
|
|
2302
|
-
return /* @__PURE__ */
|
|
2303
|
-
/* @__PURE__ */
|
|
2304
|
-
/* @__PURE__ */
|
|
2305
|
-
/* @__PURE__ */
|
|
2306
|
-
/* @__PURE__ */
|
|
2307
|
-
onRequestReport && /* @__PURE__ */
|
|
2308
|
-
/* @__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) => {
|
|
2309
2371
|
const count = (analysis.choices?.[id] ?? []).filter(
|
|
2310
2372
|
(choice) => !choice.options.some((option) => option.id === choice.value)
|
|
2311
2373
|
).length;
|
|
2312
|
-
return /* @__PURE__ */
|
|
2374
|
+
return /* @__PURE__ */ jsxs16(
|
|
2313
2375
|
"button",
|
|
2314
2376
|
{
|
|
2315
2377
|
type: "button",
|
|
@@ -2318,110 +2380,110 @@ function AnalysisView({
|
|
|
2318
2380
|
onClick: () => setSection(id),
|
|
2319
2381
|
children: [
|
|
2320
2382
|
ui.analysisSections[id],
|
|
2321
|
-
count > 0 && /* @__PURE__ */
|
|
2383
|
+
count > 0 && /* @__PURE__ */ jsx18("span", { className: "pt-analysis__open", "aria-hidden": "true", children: count })
|
|
2322
2384
|
]
|
|
2323
2385
|
},
|
|
2324
2386
|
id
|
|
2325
2387
|
);
|
|
2326
2388
|
}) }),
|
|
2327
|
-
here.length > 0 && /* @__PURE__ */
|
|
2389
|
+
here.length > 0 && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
|
|
2328
2390
|
ui.analysisAnswered(answeredHere, here.length),
|
|
2329
|
-
answeredHere === here.length && /* @__PURE__ */
|
|
2391
|
+
answeredHere === here.length && /* @__PURE__ */ jsxs16(Fragment4, { children: [
|
|
2330
2392
|
" \xB7 ",
|
|
2331
2393
|
ui.analysisAllDecided
|
|
2332
2394
|
] })
|
|
2333
2395
|
] })
|
|
2334
2396
|
] }),
|
|
2335
|
-
section === "board" && /* @__PURE__ */
|
|
2336
|
-
/* @__PURE__ */
|
|
2337
|
-
/* @__PURE__ */
|
|
2338
|
-
/* @__PURE__ */
|
|
2339
|
-
/* @__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: [
|
|
2340
2402
|
[ui.factOpen, String(facts.open)],
|
|
2341
2403
|
[ui.factWaiting, String(facts.waitingOnOwner)],
|
|
2342
2404
|
[ui.factOrders, String(facts.orders)],
|
|
2343
2405
|
[ui.factHighRisk, String(facts.highRisk)]
|
|
2344
|
-
].map(([label, value]) => /* @__PURE__ */
|
|
2345
|
-
/* @__PURE__ */
|
|
2346
|
-
/* @__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 })
|
|
2347
2409
|
] }, label)) }),
|
|
2348
|
-
/* @__PURE__ */
|
|
2349
|
-
/* @__PURE__ */
|
|
2350
|
-
/* @__PURE__ */
|
|
2351
|
-
/* @__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 })
|
|
2352
2414
|
] }, column.id)) }),
|
|
2353
|
-
facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */
|
|
2415
|
+
facts.oldestOpen && facts.oldestOpenDays !== null && /* @__PURE__ */ jsxs16("p", { className: "pt-analysis__stage", children: [
|
|
2354
2416
|
ui.factOldest,
|
|
2355
2417
|
": ",
|
|
2356
|
-
/* @__PURE__ */
|
|
2418
|
+
/* @__PURE__ */ jsx18("strong", { children: ui.factDays(facts.oldestOpenDays) }),
|
|
2357
2419
|
" \xB7 ",
|
|
2358
2420
|
t(facts.oldestOpen.title)
|
|
2359
2421
|
] })
|
|
2360
2422
|
] }),
|
|
2361
|
-
/* @__PURE__ */
|
|
2362
|
-
/* @__PURE__ */
|
|
2363
|
-
/* @__PURE__ */
|
|
2364
|
-
facts.claimed.length === 0 ? /* @__PURE__ */
|
|
2365
|
-
/* @__PURE__ */
|
|
2366
|
-
/* @__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 })
|
|
2367
2429
|
] }, card.id)) })
|
|
2368
2430
|
] })
|
|
2369
2431
|
] }),
|
|
2370
|
-
section === "project" && /* @__PURE__ */
|
|
2371
|
-
/* @__PURE__ */
|
|
2372
|
-
/* @__PURE__ */
|
|
2373
|
-
/* @__PURE__ */
|
|
2374
|
-
/* @__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: [
|
|
2375
2437
|
ui.stage,
|
|
2376
2438
|
": ",
|
|
2377
|
-
/* @__PURE__ */
|
|
2439
|
+
/* @__PURE__ */ jsx18("strong", { children: analysis.stage })
|
|
2378
2440
|
] })
|
|
2379
2441
|
] }),
|
|
2380
|
-
/* @__PURE__ */
|
|
2381
|
-
/* @__PURE__ */
|
|
2382
|
-
/* @__PURE__ */
|
|
2383
|
-
/* @__PURE__ */
|
|
2384
|
-
/* @__PURE__ */
|
|
2385
|
-
/* @__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] })
|
|
2386
2448
|
] }, goal.id)) })
|
|
2387
2449
|
] }),
|
|
2388
|
-
/* @__PURE__ */
|
|
2389
|
-
/* @__PURE__ */
|
|
2390
|
-
/* @__PURE__ */
|
|
2391
|
-
/* @__PURE__ */
|
|
2392
|
-
/* @__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 })
|
|
2393
2455
|
] }, constraint.id)) })
|
|
2394
2456
|
] })
|
|
2395
2457
|
] }),
|
|
2396
|
-
/* @__PURE__ */
|
|
2397
|
-
/* @__PURE__ */
|
|
2398
|
-
/* @__PURE__ */
|
|
2399
|
-
/* @__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)) })
|
|
2400
2462
|
] })
|
|
2401
2463
|
] }),
|
|
2402
|
-
section === "strategy" && /* @__PURE__ */
|
|
2403
|
-
/* @__PURE__ */
|
|
2404
|
-
/* @__PURE__ */
|
|
2405
|
-
/* @__PURE__ */
|
|
2406
|
-
/* @__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) => {
|
|
2407
2469
|
const chosen = analysis.chosen === strategy.id;
|
|
2408
|
-
return /* @__PURE__ */
|
|
2409
|
-
/* @__PURE__ */
|
|
2410
|
-
/* @__PURE__ */
|
|
2411
|
-
/* @__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: [
|
|
2412
2474
|
[ui.effort, strategy.effort],
|
|
2413
2475
|
[ui.riskShort, strategy.risk],
|
|
2414
2476
|
[ui.upside, strategy.upside]
|
|
2415
|
-
].map(([label, value]) => /* @__PURE__ */
|
|
2416
|
-
/* @__PURE__ */
|
|
2417
|
-
/* @__PURE__ */
|
|
2418
|
-
/* @__PURE__ */
|
|
2419
|
-
/* @__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 })
|
|
2420
2482
|
] })
|
|
2421
2483
|
] }, label)) }),
|
|
2422
|
-
/* @__PURE__ */
|
|
2423
|
-
/* @__PURE__ */
|
|
2424
|
-
/* @__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(
|
|
2425
2487
|
FilterChip,
|
|
2426
2488
|
{
|
|
2427
2489
|
label: chosen ? ui.strategyChosen : ui.strategyChoose,
|
|
@@ -2432,19 +2494,19 @@ function AnalysisView({
|
|
|
2432
2494
|
] }, strategy.id);
|
|
2433
2495
|
}) })
|
|
2434
2496
|
] }),
|
|
2435
|
-
/* @__PURE__ */
|
|
2436
|
-
/* @__PURE__ */
|
|
2437
|
-
/* @__PURE__ */
|
|
2438
|
-
/* @__PURE__ */
|
|
2439
|
-
/* @__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: [
|
|
2440
2502
|
suggestion.area,
|
|
2441
2503
|
" \xB7 ",
|
|
2442
2504
|
ui.severities[suggestion.severity],
|
|
2443
2505
|
" \xB7 ",
|
|
2444
2506
|
suggestion.date
|
|
2445
2507
|
] }),
|
|
2446
|
-
/* @__PURE__ */
|
|
2447
|
-
/* @__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(
|
|
2448
2510
|
FilterChip,
|
|
2449
2511
|
{
|
|
2450
2512
|
label: ui.suggestionStatuses[status],
|
|
@@ -2456,67 +2518,67 @@ function AnalysisView({
|
|
|
2456
2518
|
] }, suggestion.id)) })
|
|
2457
2519
|
] })
|
|
2458
2520
|
] }),
|
|
2459
|
-
section === "market" && /* @__PURE__ */
|
|
2460
|
-
/* @__PURE__ */
|
|
2461
|
-
/* @__PURE__ */
|
|
2462
|
-
/* @__PURE__ */
|
|
2463
|
-
/* @__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) })
|
|
2464
2526
|
] }),
|
|
2465
|
-
/* @__PURE__ */
|
|
2466
|
-
/* @__PURE__ */
|
|
2467
|
-
/* @__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) })
|
|
2468
2530
|
] })
|
|
2469
2531
|
] }),
|
|
2470
|
-
/* @__PURE__ */
|
|
2471
|
-
/* @__PURE__ */
|
|
2472
|
-
/* @__PURE__ */
|
|
2473
|
-
/* @__PURE__ */
|
|
2474
|
-
/* @__PURE__ */
|
|
2475
|
-
/* @__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 }),
|
|
2476
2538
|
t(rival.strength)
|
|
2477
2539
|
] }),
|
|
2478
|
-
/* @__PURE__ */
|
|
2479
|
-
/* @__PURE__ */
|
|
2540
|
+
/* @__PURE__ */ jsxs16("p", { className: "pt-rival__line is-gap", children: [
|
|
2541
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-rival__tag", children: ui.competitorGap }),
|
|
2480
2542
|
t(rival.gap)
|
|
2481
2543
|
] })
|
|
2482
2544
|
] }, rival.id)) }),
|
|
2483
|
-
analysis.market.pricing && /* @__PURE__ */
|
|
2484
|
-
/* @__PURE__ */
|
|
2485
|
-
/* @__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) })
|
|
2486
2548
|
] }),
|
|
2487
|
-
analysis.market.notes && analysis.market.notes.length > 0 && /* @__PURE__ */
|
|
2488
|
-
/* @__PURE__ */
|
|
2489
|
-
/* @__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))) })
|
|
2490
2552
|
] })
|
|
2491
|
-
] }) : /* @__PURE__ */
|
|
2492
|
-
/* @__PURE__ */
|
|
2493
|
-
total > 0 && /* @__PURE__ */
|
|
2494
|
-
/* @__PURE__ */
|
|
2495
|
-
/* @__PURE__ */
|
|
2496
|
-
/* @__PURE__ */
|
|
2497
|
-
/* @__PURE__ */
|
|
2498
|
-
answers.map(({ section: from, choice, option }) => /* @__PURE__ */
|
|
2499
|
-
/* @__PURE__ */
|
|
2500
|
-
/* @__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] }),
|
|
2501
2563
|
t(choice.question)
|
|
2502
2564
|
] }),
|
|
2503
|
-
/* @__PURE__ */
|
|
2565
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: t(option.label) })
|
|
2504
2566
|
] }, choice.id)),
|
|
2505
|
-
answers.length === 0 && /* @__PURE__ */
|
|
2567
|
+
answers.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.choicesNone })
|
|
2506
2568
|
] })
|
|
2507
2569
|
] }),
|
|
2508
|
-
/* @__PURE__ */
|
|
2509
|
-
/* @__PURE__ */
|
|
2510
|
-
/* @__PURE__ */
|
|
2511
|
-
/* @__PURE__ */
|
|
2512
|
-
open.map(({ section: from, choice }) => /* @__PURE__ */
|
|
2513
|
-
/* @__PURE__ */
|
|
2514
|
-
/* @__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] }),
|
|
2515
2577
|
t(choice.question)
|
|
2516
2578
|
] }),
|
|
2517
|
-
/* @__PURE__ */
|
|
2579
|
+
/* @__PURE__ */ jsx18("span", { className: "pt-analysis__weight", children: ui.choiceOpen })
|
|
2518
2580
|
] }, choice.id)),
|
|
2519
|
-
open.length === 0 && /* @__PURE__ */
|
|
2581
|
+
open.length === 0 && /* @__PURE__ */ jsx18("li", { className: "pt-analysis__goal is-off", children: ui.analysisAllDecided })
|
|
2520
2582
|
] })
|
|
2521
2583
|
] })
|
|
2522
2584
|
] })
|
|
@@ -2567,39 +2629,39 @@ function ageInWords(seconds, lang) {
|
|
|
2567
2629
|
}
|
|
2568
2630
|
|
|
2569
2631
|
// src/panel/MarketplaceView.tsx
|
|
2570
|
-
import { Fragment as
|
|
2632
|
+
import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2571
2633
|
function ToolRow({
|
|
2572
2634
|
tool,
|
|
2573
2635
|
lang,
|
|
2574
2636
|
ui,
|
|
2575
2637
|
onInstall
|
|
2576
2638
|
}) {
|
|
2577
|
-
return /* @__PURE__ */
|
|
2578
|
-
/* @__PURE__ */
|
|
2579
|
-
/* @__PURE__ */
|
|
2580
|
-
/* @__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 })
|
|
2581
2643
|
] }),
|
|
2582
|
-
tool.summary && /* @__PURE__ */
|
|
2583
|
-
/* @__PURE__ */
|
|
2584
|
-
/* @__PURE__ */
|
|
2585
|
-
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: [
|
|
2586
2648
|
" \xB7 ",
|
|
2587
|
-
tool.version ? /* @__PURE__ */
|
|
2649
|
+
tool.version ? /* @__PURE__ */ jsxs17("span", { className: "pt-tool__version", children: [
|
|
2588
2650
|
"v",
|
|
2589
2651
|
tool.version
|
|
2590
2652
|
] }) : (
|
|
2591
2653
|
// Never a version we made up. A blank here is the plugin's own
|
|
2592
2654
|
// manifest failing to answer, and it says so on hover.
|
|
2593
|
-
/* @__PURE__ */
|
|
2655
|
+
/* @__PURE__ */ jsx19("span", { className: "pt-tool__version is-unknown", title: tool.versionError ?? void 0, children: ui.versionUnknown })
|
|
2594
2656
|
)
|
|
2595
2657
|
] }),
|
|
2596
|
-
tool.repo && /* @__PURE__ */
|
|
2658
|
+
tool.repo && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2597
2659
|
" \xB7 ",
|
|
2598
|
-
/* @__PURE__ */
|
|
2660
|
+
/* @__PURE__ */ jsx19("a", { className: "pt-tool__repo", href: `https://github.com/${tool.repo}`, target: "_blank", rel: "noreferrer", children: tool.repo })
|
|
2599
2661
|
] })
|
|
2600
2662
|
] }),
|
|
2601
|
-
tool.tags.length > 0 && /* @__PURE__ */
|
|
2602
|
-
!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(
|
|
2603
2665
|
CopyBlock,
|
|
2604
2666
|
{
|
|
2605
2667
|
text: tool.standaloneCommand,
|
|
@@ -2607,11 +2669,11 @@ function ToolRow({
|
|
|
2607
2669
|
labels: { copy: ui.copy, copied: ui.copied, selected: ui.copySelected }
|
|
2608
2670
|
}
|
|
2609
2671
|
),
|
|
2610
|
-
/* @__PURE__ */
|
|
2611
|
-
/* @__PURE__ */
|
|
2612
|
-
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 })
|
|
2613
2675
|
] }),
|
|
2614
|
-
tool.state === "misconfigured" && /* @__PURE__ */
|
|
2676
|
+
tool.state === "misconfigured" && /* @__PURE__ */ jsx19("p", { className: "pt-warn", children: ui.stateMisconfiguredWhy })
|
|
2615
2677
|
] });
|
|
2616
2678
|
}
|
|
2617
2679
|
function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
|
|
@@ -2633,39 +2695,39 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
|
|
|
2633
2695
|
}),
|
|
2634
2696
|
[tools]
|
|
2635
2697
|
);
|
|
2636
|
-
return /* @__PURE__ */
|
|
2637
|
-
/* @__PURE__ */
|
|
2638
|
-
/* @__PURE__ */
|
|
2639
|
-
/* @__PURE__ */
|
|
2640
|
-
/* @__PURE__ */
|
|
2641
|
-
/* @__PURE__ */
|
|
2642
|
-
onRefresh && /* @__PURE__ */
|
|
2643
|
-
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)) })
|
|
2644
2706
|
] }),
|
|
2645
|
-
report?.stale && !report.unavailable && /* @__PURE__ */
|
|
2646
|
-
report?.unavailable && /* @__PURE__ */
|
|
2647
|
-
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 })
|
|
2648
2710
|
] }),
|
|
2649
|
-
report && /* @__PURE__ */
|
|
2650
|
-
/* @__PURE__ */
|
|
2711
|
+
report && /* @__PURE__ */ jsxs17("section", { children: [
|
|
2712
|
+
/* @__PURE__ */ jsxs17("p", { className: "pt-marketplace__project", children: [
|
|
2651
2713
|
ui.stateFrom(report.project.repo, SETTINGS_PATH),
|
|
2652
|
-
report.project.settingsStatus === "absent" && /* @__PURE__ */
|
|
2714
|
+
report.project.settingsStatus === "absent" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2653
2715
|
" \xB7 ",
|
|
2654
2716
|
ui.settingsAbsent
|
|
2655
2717
|
] }),
|
|
2656
|
-
report.project.settingsStatus === "unreadable" && /* @__PURE__ */
|
|
2718
|
+
report.project.settingsStatus === "unreadable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2657
2719
|
" \xB7 ",
|
|
2658
2720
|
ui.settingsUnreadable
|
|
2659
2721
|
] }),
|
|
2660
|
-
report.project.settingsStatus === "unparseable" && /* @__PURE__ */
|
|
2722
|
+
report.project.settingsStatus === "unparseable" && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
2661
2723
|
" \xB7 ",
|
|
2662
2724
|
ui.settingsUnparseable
|
|
2663
2725
|
] })
|
|
2664
2726
|
] }),
|
|
2665
|
-
report.project.detail && /* @__PURE__ */
|
|
2666
|
-
/* @__PURE__ */
|
|
2667
|
-
/* @__PURE__ */
|
|
2668
|
-
/* @__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(
|
|
2669
2731
|
FilterChip,
|
|
2670
2732
|
{
|
|
2671
2733
|
label: ui.filterPlugins,
|
|
@@ -2674,7 +2736,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
|
|
|
2674
2736
|
onClick: () => setFilter("plugins")
|
|
2675
2737
|
}
|
|
2676
2738
|
),
|
|
2677
|
-
/* @__PURE__ */
|
|
2739
|
+
/* @__PURE__ */ jsx19(
|
|
2678
2740
|
FilterChip,
|
|
2679
2741
|
{
|
|
2680
2742
|
label: ui.filterActive,
|
|
@@ -2683,7 +2745,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
|
|
|
2683
2745
|
onClick: () => setFilter("active")
|
|
2684
2746
|
}
|
|
2685
2747
|
),
|
|
2686
|
-
/* @__PURE__ */
|
|
2748
|
+
/* @__PURE__ */ jsx19(
|
|
2687
2749
|
FilterChip,
|
|
2688
2750
|
{
|
|
2689
2751
|
label: ui.filterStandalone,
|
|
@@ -2693,12 +2755,12 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
|
|
|
2693
2755
|
}
|
|
2694
2756
|
)
|
|
2695
2757
|
] }),
|
|
2696
|
-
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)) })
|
|
2697
2759
|
] }),
|
|
2698
|
-
open && /* @__PURE__ */
|
|
2699
|
-
/* @__PURE__ */
|
|
2700
|
-
/* @__PURE__ */
|
|
2701
|
-
/* @__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(
|
|
2702
2764
|
InstallSheet,
|
|
2703
2765
|
{
|
|
2704
2766
|
tool: open,
|
|
@@ -2707,7 +2769,7 @@ function MarketplaceView({ report, loading, failure, lang, ui, onRefresh }) {
|
|
|
2707
2769
|
registered: report?.project.marketplaceRegistered ?? false
|
|
2708
2770
|
}
|
|
2709
2771
|
),
|
|
2710
|
-
/* @__PURE__ */
|
|
2772
|
+
/* @__PURE__ */ jsx19("button", { type: "button", className: "pt-btn pt-btn--sm", onClick: () => setOpen(null), children: ui.close })
|
|
2711
2773
|
] })
|
|
2712
2774
|
] });
|
|
2713
2775
|
}
|
|
@@ -2718,9 +2780,9 @@ function InstallSheet({
|
|
|
2718
2780
|
registered
|
|
2719
2781
|
}) {
|
|
2720
2782
|
const copy = { copy: ui.copy, copied: ui.copied, selected: ui.copySelected };
|
|
2721
|
-
return /* @__PURE__ */
|
|
2722
|
-
tool.claudePlugin ? /* @__PURE__ */
|
|
2723
|
-
/* @__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(
|
|
2724
2786
|
CopyBlock,
|
|
2725
2787
|
{
|
|
2726
2788
|
text: repositorySnippet(tool.id, marketplace),
|
|
@@ -2729,16 +2791,16 @@ function InstallSheet({
|
|
|
2729
2791
|
labels: copy
|
|
2730
2792
|
}
|
|
2731
2793
|
) }),
|
|
2732
|
-
/* @__PURE__ */
|
|
2733
|
-
] }) : /* @__PURE__ */
|
|
2734
|
-
tool.standaloneCommand ? /* @__PURE__ */
|
|
2735
|
-
/* @__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) })
|
|
2736
2798
|
] });
|
|
2737
2799
|
}
|
|
2738
2800
|
|
|
2739
2801
|
// src/panel/CardSheet.tsx
|
|
2740
2802
|
import { useState as useState9 } from "react";
|
|
2741
|
-
import { jsx as
|
|
2803
|
+
import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2742
2804
|
var LEVEL_LABEL = (ui) => ({
|
|
2743
2805
|
high: ui.levelHigh,
|
|
2744
2806
|
medium: ui.levelMedium,
|
|
@@ -2765,9 +2827,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2765
2827
|
});
|
|
2766
2828
|
setNote("");
|
|
2767
2829
|
}
|
|
2768
|
-
return /* @__PURE__ */
|
|
2769
|
-
/* @__PURE__ */
|
|
2770
|
-
/* @__PURE__ */
|
|
2830
|
+
return /* @__PURE__ */ jsxs18(DetailSheet, { open: true, onClose, ariaLabel: ui.cardDetail, children: [
|
|
2831
|
+
/* @__PURE__ */ jsxs18(DetailSection, { title: ui.title, children: [
|
|
2832
|
+
/* @__PURE__ */ jsx20(
|
|
2771
2833
|
"input",
|
|
2772
2834
|
{
|
|
2773
2835
|
className: "pt-input",
|
|
@@ -2776,9 +2838,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2776
2838
|
onChange: (event) => patch({ title: writeText(lang, event.target.value) })
|
|
2777
2839
|
}
|
|
2778
2840
|
),
|
|
2779
|
-
untranslated(card.title) && /* @__PURE__ */
|
|
2841
|
+
untranslated(card.title) && /* @__PURE__ */ jsx20("span", { className: "pt-flag", children: ui.untranslatedBadge })
|
|
2780
2842
|
] }),
|
|
2781
|
-
/* @__PURE__ */
|
|
2843
|
+
/* @__PURE__ */ jsx20(DetailSection, { title: ui.detail, children: /* @__PURE__ */ jsx20(
|
|
2782
2844
|
"textarea",
|
|
2783
2845
|
{
|
|
2784
2846
|
className: "pt-textarea",
|
|
@@ -2788,7 +2850,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2788
2850
|
onChange: (event) => patch({ body: writeText(lang, event.target.value) })
|
|
2789
2851
|
}
|
|
2790
2852
|
) }),
|
|
2791
|
-
/* @__PURE__ */
|
|
2853
|
+
/* @__PURE__ */ jsx20(DetailSection, { title: ui.areaLabel, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: state.areas.map((area) => /* @__PURE__ */ jsx20(
|
|
2792
2854
|
FilterChip,
|
|
2793
2855
|
{
|
|
2794
2856
|
label: text(area.label, lang),
|
|
@@ -2797,7 +2859,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2797
2859
|
},
|
|
2798
2860
|
area.id
|
|
2799
2861
|
)) }) }),
|
|
2800
|
-
/* @__PURE__ */
|
|
2862
|
+
/* @__PURE__ */ jsx20(DetailSection, { title: ui.priority, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: LEVELS.map((level) => /* @__PURE__ */ jsx20(
|
|
2801
2863
|
FilterChip,
|
|
2802
2864
|
{
|
|
2803
2865
|
label: levelLabel[level],
|
|
@@ -2806,7 +2868,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2806
2868
|
},
|
|
2807
2869
|
level
|
|
2808
2870
|
)) }) }),
|
|
2809
|
-
/* @__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(
|
|
2810
2872
|
FilterChip,
|
|
2811
2873
|
{
|
|
2812
2874
|
label: levelLabel[level],
|
|
@@ -2815,7 +2877,7 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2815
2877
|
},
|
|
2816
2878
|
level
|
|
2817
2879
|
)) }) }),
|
|
2818
|
-
/* @__PURE__ */
|
|
2880
|
+
/* @__PURE__ */ jsx20(DetailSection, { title: ui.dependsOn, children: /* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: OWNERS.map((owner) => /* @__PURE__ */ jsx20(
|
|
2819
2881
|
FilterChip,
|
|
2820
2882
|
{
|
|
2821
2883
|
label: ownerLabel[owner],
|
|
@@ -2824,14 +2886,14 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2824
2886
|
},
|
|
2825
2887
|
owner
|
|
2826
2888
|
)) }) }),
|
|
2827
|
-
/* @__PURE__ */
|
|
2828
|
-
/* @__PURE__ */
|
|
2829
|
-
/* @__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 }) })
|
|
2830
2892
|
] }) }),
|
|
2831
|
-
/* @__PURE__ */
|
|
2832
|
-
/* @__PURE__ */
|
|
2833
|
-
/* @__PURE__ */
|
|
2834
|
-
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(
|
|
2835
2897
|
FilterChip,
|
|
2836
2898
|
{
|
|
2837
2899
|
label: INTENT_COPY[intent].label[lang],
|
|
@@ -2841,12 +2903,12 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2841
2903
|
intent
|
|
2842
2904
|
))
|
|
2843
2905
|
] }),
|
|
2844
|
-
card.intent && /* @__PURE__ */
|
|
2906
|
+
card.intent && /* @__PURE__ */ jsx20("p", { className: "pt-panel-text pt-meaning", children: INTENT_COPY[card.intent].meaning[lang] })
|
|
2845
2907
|
] }),
|
|
2846
|
-
/* @__PURE__ */
|
|
2847
|
-
card.checks.length > 0 && /* @__PURE__ */
|
|
2848
|
-
/* @__PURE__ */
|
|
2849
|
-
/* @__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(
|
|
2850
2912
|
"input",
|
|
2851
2913
|
{
|
|
2852
2914
|
type: "checkbox",
|
|
@@ -2858,9 +2920,9 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2858
2920
|
})
|
|
2859
2921
|
}
|
|
2860
2922
|
),
|
|
2861
|
-
/* @__PURE__ */
|
|
2923
|
+
/* @__PURE__ */ jsx20("span", { className: check.done ? "is-done" : void 0, children: text(check.text, lang) })
|
|
2862
2924
|
] }),
|
|
2863
|
-
/* @__PURE__ */
|
|
2925
|
+
/* @__PURE__ */ jsx20(
|
|
2864
2926
|
"button",
|
|
2865
2927
|
{
|
|
2866
2928
|
type: "button",
|
|
@@ -2871,8 +2933,8 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2871
2933
|
}
|
|
2872
2934
|
)
|
|
2873
2935
|
] }, check.id)) }),
|
|
2874
|
-
/* @__PURE__ */
|
|
2875
|
-
/* @__PURE__ */
|
|
2936
|
+
/* @__PURE__ */ jsxs18("div", { className: "pt-compose", children: [
|
|
2937
|
+
/* @__PURE__ */ jsx20(
|
|
2876
2938
|
"input",
|
|
2877
2939
|
{
|
|
2878
2940
|
className: "pt-input",
|
|
@@ -2887,19 +2949,19 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2887
2949
|
}
|
|
2888
2950
|
}
|
|
2889
2951
|
),
|
|
2890
|
-
/* @__PURE__ */
|
|
2952
|
+
/* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addStep, children: ui.addStep })
|
|
2891
2953
|
] })
|
|
2892
2954
|
] }),
|
|
2893
|
-
/* @__PURE__ */
|
|
2894
|
-
card.notes.map((entry) => /* @__PURE__ */
|
|
2895
|
-
/* @__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: [
|
|
2896
2958
|
entry.by === "claude" ? "Claude" : ui.ownerYou,
|
|
2897
2959
|
" \xB7 ",
|
|
2898
2960
|
entry.date
|
|
2899
2961
|
] }),
|
|
2900
|
-
/* @__PURE__ */
|
|
2962
|
+
/* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: text(entry.text, lang) })
|
|
2901
2963
|
] }, entry.id)),
|
|
2902
|
-
/* @__PURE__ */
|
|
2964
|
+
/* @__PURE__ */ jsx20(
|
|
2903
2965
|
"textarea",
|
|
2904
2966
|
{
|
|
2905
2967
|
className: "pt-textarea",
|
|
@@ -2909,10 +2971,10 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2909
2971
|
onChange: (event) => setNote(event.target.value)
|
|
2910
2972
|
}
|
|
2911
2973
|
),
|
|
2912
|
-
/* @__PURE__ */
|
|
2974
|
+
/* @__PURE__ */ jsx20("button", { type: "button", className: "pt-btn pt-btn--sm pt-btn--primary", onClick: addNote, children: ui.leaveNote })
|
|
2913
2975
|
] }),
|
|
2914
|
-
/* @__PURE__ */
|
|
2915
|
-
/* @__PURE__ */
|
|
2976
|
+
/* @__PURE__ */ jsxs18(DetailSection, { title: ui.columnTitle, children: [
|
|
2977
|
+
/* @__PURE__ */ jsx20("div", { className: "pt-panel-row", children: state.columns.map((column) => /* @__PURE__ */ jsx20(
|
|
2916
2978
|
FilterChip,
|
|
2917
2979
|
{
|
|
2918
2980
|
label: text(column.title, lang),
|
|
@@ -2923,16 +2985,16 @@ function CardSheet({ card, state, lang, ui, onChange, onDelete, onClose }) {
|
|
|
2923
2985
|
},
|
|
2924
2986
|
column.id
|
|
2925
2987
|
)) }),
|
|
2926
|
-
(card.startedAt || card.completedAt) && /* @__PURE__ */
|
|
2988
|
+
(card.startedAt || card.completedAt) && /* @__PURE__ */ jsxs18("p", { className: "pt-panel-text pt-stamps", children: [
|
|
2927
2989
|
card.startedAt && `${ui.started}: ${card.startedAt}`,
|
|
2928
2990
|
card.startedAt && card.completedAt && " \xB7 ",
|
|
2929
2991
|
card.completedAt && `${ui.completed}: ${card.completedAt}`
|
|
2930
2992
|
] }),
|
|
2931
|
-
claimedWithoutStarting(card) && /* @__PURE__ */
|
|
2993
|
+
claimedWithoutStarting(card) && /* @__PURE__ */ jsx20("p", { className: "pt-warn", children: ui.neverStarted })
|
|
2932
2994
|
] }),
|
|
2933
|
-
/* @__PURE__ */
|
|
2934
|
-
/* @__PURE__ */
|
|
2935
|
-
/* @__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 })
|
|
2936
2998
|
] })
|
|
2937
2999
|
] });
|
|
2938
3000
|
}
|
|
@@ -2965,7 +3027,7 @@ function resolveTheme(saved, stored, themes, hasImported, fallback) {
|
|
|
2965
3027
|
}
|
|
2966
3028
|
|
|
2967
3029
|
// src/panel/PanelApp.tsx
|
|
2968
|
-
import { Fragment as
|
|
3030
|
+
import { Fragment as Fragment6, jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2969
3031
|
var IMPORTED = "imported";
|
|
2970
3032
|
var WIZARD_KEY = "paneltir:setup-done";
|
|
2971
3033
|
var THEME_KEY = "paneltir:theme";
|
|
@@ -3051,7 +3113,6 @@ function PanelApp({
|
|
|
3051
3113
|
);
|
|
3052
3114
|
const [state, setState] = useState10(initialState);
|
|
3053
3115
|
const [filter, setFilter] = useState10("all");
|
|
3054
|
-
const [showArchived, setShowArchived] = useState10(() => /* @__PURE__ */ new Set());
|
|
3055
3116
|
const [openCardId, setOpenCardId] = useState10(null);
|
|
3056
3117
|
const [settingsOpen, setSettingsOpen] = useState10(false);
|
|
3057
3118
|
const [update, setUpdate] = useState10(null);
|
|
@@ -3095,11 +3156,11 @@ function PanelApp({
|
|
|
3095
3156
|
status: state_("GH_TOKEN"),
|
|
3096
3157
|
variable: "GH_TOKEN",
|
|
3097
3158
|
enables: ui.needTokenEnables,
|
|
3098
|
-
fix: /* @__PURE__ */
|
|
3099
|
-
/* @__PURE__ */
|
|
3100
|
-
/* @__PURE__ */
|
|
3101
|
-
/* @__PURE__ */
|
|
3102
|
-
/* @__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 })
|
|
3103
3164
|
] })
|
|
3104
3165
|
},
|
|
3105
3166
|
{
|
|
@@ -3108,7 +3169,7 @@ function PanelApp({
|
|
|
3108
3169
|
status: state_("PANEL_REPO"),
|
|
3109
3170
|
variable: "PANEL_REPO",
|
|
3110
3171
|
enables: ui.needRepoEnables,
|
|
3111
|
-
fix: /* @__PURE__ */
|
|
3172
|
+
fix: /* @__PURE__ */ jsx21("p", { children: ui.fixRepo })
|
|
3112
3173
|
},
|
|
3113
3174
|
// The gate is the only requirement here that is not an environment
|
|
3114
3175
|
// variable: it is files this project owns, and the only one whose
|
|
@@ -3135,12 +3196,12 @@ function PanelApp({
|
|
|
3135
3196
|
label: ui.needGate,
|
|
3136
3197
|
status: gateReading.verdict === "current" ? "ok" : gateReading.verdict === "behind" ? "missing" : "unknown",
|
|
3137
3198
|
enables: ui.needGateEnables,
|
|
3138
|
-
fix: /* @__PURE__ */
|
|
3139
|
-
/* @__PURE__ */
|
|
3199
|
+
fix: /* @__PURE__ */ jsxs19(Fragment6, { children: [
|
|
3200
|
+
/* @__PURE__ */ jsxs19("p", { children: [
|
|
3140
3201
|
ui.fixGate,
|
|
3141
3202
|
gateReading.copiedFrom ? ` (v${gateReading.copiedFrom} \u2192 v${gateReading.installed})` : ""
|
|
3142
3203
|
] }),
|
|
3143
|
-
/* @__PURE__ */
|
|
3204
|
+
/* @__PURE__ */ jsx21("pre", { className: "pt-copy__pre", children: "npx paneltir doctor" })
|
|
3144
3205
|
] })
|
|
3145
3206
|
}]
|
|
3146
3207
|
];
|
|
@@ -3174,32 +3235,24 @@ function PanelApp({
|
|
|
3174
3235
|
[filter]
|
|
3175
3236
|
);
|
|
3176
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
|
+
);
|
|
3177
3248
|
const boardColumns = useMemo5(
|
|
3178
|
-
() => state.columns.map((column) => {
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
hint: column.hint ? t(column.hint) : void 0,
|
|
3186
|
-
cards: showing,
|
|
3187
|
-
footer: archived.length ? /* @__PURE__ */ jsx20(
|
|
3188
|
-
"button",
|
|
3189
|
-
{
|
|
3190
|
-
type: "button",
|
|
3191
|
-
onClick: () => setShowArchived((current) => {
|
|
3192
|
-
const next = new Set(current);
|
|
3193
|
-
if (next.has(column.id)) next.delete(column.id);
|
|
3194
|
-
else next.add(column.id);
|
|
3195
|
-
return next;
|
|
3196
|
-
}),
|
|
3197
|
-
children: showArchived.has(column.id) ? ui.archivedHide : `${archived.length} ${archived.length === 1 ? ui.archivedOne : ui.archivedMany}`
|
|
3198
|
-
}
|
|
3199
|
-
) : void 0
|
|
3200
|
-
};
|
|
3201
|
-
}),
|
|
3202
|
-
[state.columns, visibleCards, doneColumns, showArchived, t, ui]
|
|
3249
|
+
() => state.columns.map((column) => ({
|
|
3250
|
+
id: column.id,
|
|
3251
|
+
title: t(column.title),
|
|
3252
|
+
hint: column.hint ? t(column.hint) : void 0,
|
|
3253
|
+
cards: visibleCards.filter((card) => card.column === column.id && !archivedIds.has(card.id))
|
|
3254
|
+
})),
|
|
3255
|
+
[state.columns, visibleCards, archivedIds, t]
|
|
3203
3256
|
);
|
|
3204
3257
|
const notifications = useMemo5(() => {
|
|
3205
3258
|
const items = [];
|
|
@@ -3569,21 +3622,21 @@ function PanelApp({
|
|
|
3569
3622
|
state.updatedAt,
|
|
3570
3623
|
save.status === "saved" ? ui.savedAt(save.at) : dirty ? ui.unsaved : ""
|
|
3571
3624
|
].filter(Boolean).join(" \xB7 ");
|
|
3572
|
-
return /* @__PURE__ */
|
|
3625
|
+
return /* @__PURE__ */ jsxs19(DashboardThemeProvider, { tokens: theme, form, className, children: [
|
|
3573
3626
|
typeof decoration === "function" ? decoration(themeName) : decoration,
|
|
3574
|
-
/* @__PURE__ */
|
|
3627
|
+
/* @__PURE__ */ jsx21(
|
|
3575
3628
|
DashboardHeader,
|
|
3576
3629
|
{
|
|
3577
3630
|
wordmark: (
|
|
3578
3631
|
/* A board belongs to a project, so its name is what goes here. A
|
|
3579
3632
|
caller with a mark of its own passes `brand`; drawing one here
|
|
3580
3633
|
would be the kit deciding what somebody else's panel is called. */
|
|
3581
|
-
brand ?? /* @__PURE__ */
|
|
3634
|
+
brand ?? /* @__PURE__ */ jsx21("span", { className: "pt-panel-brand", children: state.project })
|
|
3582
3635
|
),
|
|
3583
3636
|
status,
|
|
3584
|
-
controls: /* @__PURE__ */
|
|
3585
|
-
(initialState.analysis || hasMarketplace ||
|
|
3586
|
-
/* @__PURE__ */
|
|
3637
|
+
controls: /* @__PURE__ */ jsxs19(Fragment6, { children: [
|
|
3638
|
+
(initialState.analysis || hasMarketplace || hasRecord) && /* @__PURE__ */ jsxs19("span", { className: "pt-views", children: [
|
|
3639
|
+
/* @__PURE__ */ jsx21(
|
|
3587
3640
|
"button",
|
|
3588
3641
|
{
|
|
3589
3642
|
type: "button",
|
|
@@ -3593,7 +3646,7 @@ function PanelApp({
|
|
|
3593
3646
|
children: ui.board
|
|
3594
3647
|
}
|
|
3595
3648
|
),
|
|
3596
|
-
initialState.analysis && /* @__PURE__ */
|
|
3649
|
+
initialState.analysis && /* @__PURE__ */ jsx21(
|
|
3597
3650
|
"button",
|
|
3598
3651
|
{
|
|
3599
3652
|
type: "button",
|
|
@@ -3603,7 +3656,7 @@ function PanelApp({
|
|
|
3603
3656
|
children: ui.analysis
|
|
3604
3657
|
}
|
|
3605
3658
|
),
|
|
3606
|
-
hasMarketplace && /* @__PURE__ */
|
|
3659
|
+
hasMarketplace && /* @__PURE__ */ jsx21(
|
|
3607
3660
|
"button",
|
|
3608
3661
|
{
|
|
3609
3662
|
type: "button",
|
|
@@ -3613,18 +3666,18 @@ function PanelApp({
|
|
|
3613
3666
|
children: ui.marketplace
|
|
3614
3667
|
}
|
|
3615
3668
|
),
|
|
3616
|
-
|
|
3669
|
+
hasRecord && /* @__PURE__ */ jsx21(
|
|
3617
3670
|
"button",
|
|
3618
3671
|
{
|
|
3619
3672
|
type: "button",
|
|
3620
3673
|
className: `pt-lang${view === "history" ? " is-on" : ""}`,
|
|
3621
3674
|
"aria-pressed": view === "history",
|
|
3622
3675
|
onClick: () => setView("history"),
|
|
3623
|
-
children: ui.history
|
|
3676
|
+
children: showHistory ? ui.history : ui.archiveTitle
|
|
3624
3677
|
}
|
|
3625
3678
|
)
|
|
3626
3679
|
] }),
|
|
3627
|
-
showLanguage && LANGS.map((code) => /* @__PURE__ */
|
|
3680
|
+
showLanguage && LANGS.map((code) => /* @__PURE__ */ jsx21(
|
|
3628
3681
|
"button",
|
|
3629
3682
|
{
|
|
3630
3683
|
type: "button",
|
|
@@ -3635,7 +3688,7 @@ function PanelApp({
|
|
|
3635
3688
|
},
|
|
3636
3689
|
code
|
|
3637
3690
|
)),
|
|
3638
|
-
/* @__PURE__ */
|
|
3691
|
+
/* @__PURE__ */ jsx21(
|
|
3639
3692
|
NotificationBell,
|
|
3640
3693
|
{
|
|
3641
3694
|
notifications,
|
|
@@ -3649,8 +3702,8 @@ function PanelApp({
|
|
|
3649
3702
|
}
|
|
3650
3703
|
}
|
|
3651
3704
|
),
|
|
3652
|
-
saveEndpoint && /* @__PURE__ */
|
|
3653
|
-
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(
|
|
3654
3707
|
"button",
|
|
3655
3708
|
{
|
|
3656
3709
|
type: "button",
|
|
@@ -3665,7 +3718,7 @@ function PanelApp({
|
|
|
3665
3718
|
onLinkClick: () => setSettingsOpen(true)
|
|
3666
3719
|
}
|
|
3667
3720
|
),
|
|
3668
|
-
state.notice && /* @__PURE__ */
|
|
3721
|
+
state.notice && /* @__PURE__ */ jsx21(
|
|
3669
3722
|
AlertBanner,
|
|
3670
3723
|
{
|
|
3671
3724
|
visible: noticeVisible,
|
|
@@ -3674,8 +3727,8 @@ function PanelApp({
|
|
|
3674
3727
|
onAction: () => setNoticeVisible(false)
|
|
3675
3728
|
}
|
|
3676
3729
|
),
|
|
3677
|
-
save.status === "error" && /* @__PURE__ */
|
|
3678
|
-
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(
|
|
3679
3732
|
AlertBanner,
|
|
3680
3733
|
{
|
|
3681
3734
|
visible: true,
|
|
@@ -3684,7 +3737,7 @@ function PanelApp({
|
|
|
3684
3737
|
onAction: () => setWizardOpen(true)
|
|
3685
3738
|
}
|
|
3686
3739
|
),
|
|
3687
|
-
view === "board" && !saveEndpoint && /* @__PURE__ */
|
|
3740
|
+
view === "board" && !saveEndpoint && /* @__PURE__ */ jsx21(
|
|
3688
3741
|
GuideTour,
|
|
3689
3742
|
{
|
|
3690
3743
|
dismissed: state.preferences?.guideDismissed,
|
|
@@ -3693,32 +3746,32 @@ function PanelApp({
|
|
|
3693
3746
|
{
|
|
3694
3747
|
id: "demo-welcome",
|
|
3695
3748
|
title: ui.demoTourWelcomeTitle,
|
|
3696
|
-
children: /* @__PURE__ */
|
|
3749
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourWelcomeBody }),
|
|
3697
3750
|
dismissLabel: ui.gotIt
|
|
3698
3751
|
},
|
|
3699
3752
|
{
|
|
3700
3753
|
id: "demo-board",
|
|
3701
3754
|
title: ui.demoTourBoardTitle,
|
|
3702
|
-
children: /* @__PURE__ */
|
|
3755
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourBoardBody }),
|
|
3703
3756
|
dismissLabel: ui.gotIt
|
|
3704
3757
|
},
|
|
3705
3758
|
{
|
|
3706
3759
|
id: "demo-theme",
|
|
3707
3760
|
title: ui.demoTourThemeTitle,
|
|
3708
|
-
children: /* @__PURE__ */
|
|
3761
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourThemeBody }),
|
|
3709
3762
|
dismissLabel: ui.gotIt,
|
|
3710
3763
|
action: { label: ui.settings, onClick: () => setSettingsOpen(true) }
|
|
3711
3764
|
},
|
|
3712
3765
|
{
|
|
3713
3766
|
id: "demo-keep",
|
|
3714
3767
|
title: ui.demoTourKeepTitle,
|
|
3715
|
-
children: /* @__PURE__ */
|
|
3768
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.demoTourKeepBody }),
|
|
3716
3769
|
dismissLabel: ui.gotIt
|
|
3717
3770
|
}
|
|
3718
3771
|
]
|
|
3719
3772
|
}
|
|
3720
3773
|
),
|
|
3721
|
-
view === "board" && saveEndpoint && /* @__PURE__ */
|
|
3774
|
+
view === "board" && saveEndpoint && /* @__PURE__ */ jsx21(
|
|
3722
3775
|
GuideTour,
|
|
3723
3776
|
{
|
|
3724
3777
|
dismissed: state.preferences?.guideDismissed,
|
|
@@ -3727,38 +3780,38 @@ function PanelApp({
|
|
|
3727
3780
|
{
|
|
3728
3781
|
id: "welcome",
|
|
3729
3782
|
title: ui.tourWelcomeTitle,
|
|
3730
|
-
children: /* @__PURE__ */
|
|
3783
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.tourWelcomeBody }),
|
|
3731
3784
|
dismissLabel: ui.gotIt
|
|
3732
3785
|
},
|
|
3733
3786
|
{
|
|
3734
3787
|
id: "board",
|
|
3735
3788
|
title: ui.tourBoardTitle,
|
|
3736
|
-
children: /* @__PURE__ */
|
|
3789
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.tourBoardBody }),
|
|
3737
3790
|
dismissLabel: ui.gotIt
|
|
3738
3791
|
},
|
|
3739
3792
|
{
|
|
3740
3793
|
id: "orders",
|
|
3741
3794
|
title: ui.tourOrdersTitle,
|
|
3742
|
-
children: /* @__PURE__ */
|
|
3795
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.tourOrdersBody }),
|
|
3743
3796
|
dismissLabel: ui.gotIt
|
|
3744
3797
|
},
|
|
3745
3798
|
{
|
|
3746
3799
|
id: "save",
|
|
3747
3800
|
title: ui.tourSaveTitle,
|
|
3748
|
-
children: /* @__PURE__ */
|
|
3801
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.tourSaveBody }),
|
|
3749
3802
|
dismissLabel: ui.gotIt
|
|
3750
3803
|
},
|
|
3751
3804
|
{
|
|
3752
3805
|
id: "theme",
|
|
3753
3806
|
title: ui.tourThemeTitle,
|
|
3754
|
-
children: /* @__PURE__ */
|
|
3807
|
+
children: /* @__PURE__ */ jsx21("p", { children: ui.tourThemeBody }),
|
|
3755
3808
|
dismissLabel: ui.gotIt,
|
|
3756
3809
|
action: { label: ui.settings, onClick: () => setSettingsOpen(true) }
|
|
3757
3810
|
}
|
|
3758
3811
|
]
|
|
3759
3812
|
}
|
|
3760
3813
|
),
|
|
3761
|
-
view === "marketplace" && hasMarketplace && /* @__PURE__ */
|
|
3814
|
+
view === "marketplace" && hasMarketplace && /* @__PURE__ */ jsx21(
|
|
3762
3815
|
MarketplaceView,
|
|
3763
3816
|
{
|
|
3764
3817
|
report: market,
|
|
@@ -3769,7 +3822,7 @@ function PanelApp({
|
|
|
3769
3822
|
onRefresh: marketplaceEndpoint ? () => loadMarketplace(true) : void 0
|
|
3770
3823
|
}
|
|
3771
3824
|
),
|
|
3772
|
-
view === "analysis" && state.analysis && /* @__PURE__ */
|
|
3825
|
+
view === "analysis" && state.analysis && /* @__PURE__ */ jsx21(
|
|
3773
3826
|
AnalysisView,
|
|
3774
3827
|
{
|
|
3775
3828
|
onRequestReport: saveEndpoint ? requestReport : void 0,
|
|
@@ -3785,20 +3838,52 @@ function PanelApp({
|
|
|
3785
3838
|
onOpenCard: setOpenCardId
|
|
3786
3839
|
}
|
|
3787
3840
|
),
|
|
3788
|
-
view === "board" && /* @__PURE__ */
|
|
3789
|
-
/* @__PURE__ */
|
|
3790
|
-
/* @__PURE__ */
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
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 })
|
|
3797
3883
|
] }),
|
|
3798
|
-
/* @__PURE__ */
|
|
3799
|
-
|
|
3800
|
-
/* @__PURE__ */
|
|
3801
|
-
/* @__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(
|
|
3802
3887
|
FilterChip,
|
|
3803
3888
|
{
|
|
3804
3889
|
label: `\u26A1 ${ui.filterForClaude}`,
|
|
@@ -3807,7 +3892,7 @@ function PanelApp({
|
|
|
3807
3892
|
onClick: () => setFilter("orders")
|
|
3808
3893
|
}
|
|
3809
3894
|
),
|
|
3810
|
-
/* @__PURE__ */
|
|
3895
|
+
/* @__PURE__ */ jsx21(
|
|
3811
3896
|
FilterChip,
|
|
3812
3897
|
{
|
|
3813
3898
|
label: ui.filterYours,
|
|
@@ -3816,7 +3901,7 @@ function PanelApp({
|
|
|
3816
3901
|
onClick: () => setFilter("yours")
|
|
3817
3902
|
}
|
|
3818
3903
|
),
|
|
3819
|
-
/* @__PURE__ */
|
|
3904
|
+
/* @__PURE__ */ jsx21(
|
|
3820
3905
|
FilterChip,
|
|
3821
3906
|
{
|
|
3822
3907
|
label: ui.filterHighRisk,
|
|
@@ -3825,7 +3910,7 @@ function PanelApp({
|
|
|
3825
3910
|
onClick: () => setFilter("risk")
|
|
3826
3911
|
}
|
|
3827
3912
|
),
|
|
3828
|
-
state.areas.map((area) => /* @__PURE__ */
|
|
3913
|
+
state.areas.map((area) => /* @__PURE__ */ jsx21(
|
|
3829
3914
|
FilterChip,
|
|
3830
3915
|
{
|
|
3831
3916
|
label: t(area.label),
|
|
@@ -3837,13 +3922,13 @@ function PanelApp({
|
|
|
3837
3922
|
))
|
|
3838
3923
|
] })
|
|
3839
3924
|
] }),
|
|
3840
|
-
/* @__PURE__ */
|
|
3925
|
+
/* @__PURE__ */ jsx21(
|
|
3841
3926
|
Board,
|
|
3842
3927
|
{
|
|
3843
3928
|
columns: boardColumns,
|
|
3844
3929
|
onMove: moveCard,
|
|
3845
3930
|
onAddCard: addCard,
|
|
3846
|
-
renderCard: (card, index, columnId) => /* @__PURE__ */
|
|
3931
|
+
renderCard: (card, index, columnId) => /* @__PURE__ */ jsx21(
|
|
3847
3932
|
Card,
|
|
3848
3933
|
{
|
|
3849
3934
|
cardId: card.id,
|
|
@@ -3860,51 +3945,72 @@ function PanelApp({
|
|
|
3860
3945
|
}
|
|
3861
3946
|
),
|
|
3862
3947
|
extras,
|
|
3863
|
-
capabilities && capabilities.length > 0 && /* @__PURE__ */
|
|
3864
|
-
/* @__PURE__ */
|
|
3865
|
-
/* @__PURE__ */
|
|
3866
|
-
/* @__PURE__ */
|
|
3867
|
-
/* @__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 })
|
|
3868
3953
|
] }),
|
|
3869
|
-
/* @__PURE__ */
|
|
3870
|
-
/* @__PURE__ */
|
|
3871
|
-
/* @__PURE__ */
|
|
3872
|
-
/* @__PURE__ */
|
|
3873
|
-
capability.code && /* @__PURE__ */
|
|
3874
|
-
/* @__PURE__ */
|
|
3875
|
-
/* @__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 }) })
|
|
3876
3961
|
] })
|
|
3877
3962
|
] }, capability.id)) })
|
|
3878
3963
|
] })
|
|
3879
3964
|
] }),
|
|
3880
|
-
view === "history" &&
|
|
3881
|
-
/* @__PURE__ */
|
|
3882
|
-
/* @__PURE__ */
|
|
3883
|
-
|
|
3884
|
-
|
|
3885
|
-
|
|
3886
|
-
state.runs.length === 0 ? /* @__PURE__ */ jsx20("p", { className: "pt-panel-text", children: ui.historyEmpty }) : /* @__PURE__ */ jsx20("ol", { className: "pt-runs", children: [...state.runs].reverse().map((run) => /* @__PURE__ */ jsxs18("li", { className: "pt-run pt-hud", children: [
|
|
3887
|
-
/* @__PURE__ */ jsxs18("p", { className: "pt-run__meta", children: [
|
|
3888
|
-
run.date,
|
|
3889
|
-
" \xB7 ",
|
|
3890
|
-
run.by === "claude" ? "Claude" : ui.ownerYou,
|
|
3891
|
-
run.fingerprint ? ` \xB7 ${run.fingerprint.replace("sha256:", "").slice(0, 12)}` : ""
|
|
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 })
|
|
3892
3971
|
] }),
|
|
3893
|
-
/* @__PURE__ */
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
":
|
|
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)}` : ""
|
|
3898
3978
|
] }),
|
|
3899
|
-
" ",
|
|
3900
|
-
run.cards.
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3905
|
-
|
|
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
|
+
] })
|
|
3906
4012
|
] }),
|
|
3907
|
-
/* @__PURE__ */
|
|
4013
|
+
/* @__PURE__ */ jsx21(
|
|
3908
4014
|
CardSheet,
|
|
3909
4015
|
{
|
|
3910
4016
|
card: openCard,
|
|
@@ -3916,7 +4022,7 @@ function PanelApp({
|
|
|
3916
4022
|
onClose: () => setOpenCardId(null)
|
|
3917
4023
|
}
|
|
3918
4024
|
),
|
|
3919
|
-
/* @__PURE__ */
|
|
4025
|
+
/* @__PURE__ */ jsx21(
|
|
3920
4026
|
DetailSheet,
|
|
3921
4027
|
{
|
|
3922
4028
|
open: wizardOpen,
|
|
@@ -3925,7 +4031,7 @@ function PanelApp({
|
|
|
3925
4031
|
setWizardOpen(false);
|
|
3926
4032
|
},
|
|
3927
4033
|
ariaLabel: ui.wizardTitle,
|
|
3928
|
-
children: /* @__PURE__ */
|
|
4034
|
+
children: /* @__PURE__ */ jsx21(
|
|
3929
4035
|
SetupWizard,
|
|
3930
4036
|
{
|
|
3931
4037
|
requirements,
|
|
@@ -3957,9 +4063,9 @@ function PanelApp({
|
|
|
3957
4063
|
)
|
|
3958
4064
|
}
|
|
3959
4065
|
),
|
|
3960
|
-
/* @__PURE__ */
|
|
3961
|
-
/* @__PURE__ */
|
|
3962
|
-
/* @__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(
|
|
3963
4069
|
SetupGuide,
|
|
3964
4070
|
{
|
|
3965
4071
|
requirements,
|
|
@@ -3972,8 +4078,8 @@ function PanelApp({
|
|
|
3972
4078
|
}
|
|
3973
4079
|
}
|
|
3974
4080
|
),
|
|
3975
|
-
setup.repo && /* @__PURE__ */
|
|
3976
|
-
!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(
|
|
3977
4083
|
"button",
|
|
3978
4084
|
{
|
|
3979
4085
|
type: "button",
|
|
@@ -3986,7 +4092,7 @@ function PanelApp({
|
|
|
3986
4092
|
}
|
|
3987
4093
|
) })
|
|
3988
4094
|
] }) }),
|
|
3989
|
-
/* @__PURE__ */
|
|
4095
|
+
/* @__PURE__ */ jsx21(DetailSection, { title: ui.guideSection, children: /* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
|
|
3990
4096
|
"button",
|
|
3991
4097
|
{
|
|
3992
4098
|
type: "button",
|
|
@@ -4004,24 +4110,24 @@ function PanelApp({
|
|
|
4004
4110
|
}
|
|
4005
4111
|
) }) })
|
|
4006
4112
|
] }),
|
|
4007
|
-
update?.behind && /* @__PURE__ */
|
|
4113
|
+
update?.behind && /* @__PURE__ */ jsxs19(
|
|
4008
4114
|
DetailSheet,
|
|
4009
4115
|
{
|
|
4010
4116
|
open: releaseOpen,
|
|
4011
4117
|
onClose: () => setReleaseOpen(false),
|
|
4012
4118
|
ariaLabel: ui.releaseTitle(update.latest),
|
|
4013
4119
|
children: [
|
|
4014
|
-
/* @__PURE__ */
|
|
4015
|
-
/* @__PURE__ */
|
|
4016
|
-
/* @__PURE__ */
|
|
4017
|
-
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) })
|
|
4018
4124
|
] }),
|
|
4019
|
-
update.notes ? /* @__PURE__ */
|
|
4020
|
-
/* @__PURE__ */
|
|
4021
|
-
/* @__PURE__ */
|
|
4022
|
-
] }, index)) }) : /* @__PURE__ */
|
|
4023
|
-
/* @__PURE__ */
|
|
4024
|
-
/* @__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(
|
|
4025
4131
|
"button",
|
|
4026
4132
|
{
|
|
4027
4133
|
type: "button",
|
|
@@ -4033,14 +4139,14 @@ function PanelApp({
|
|
|
4033
4139
|
children: ui.updateCreateCard
|
|
4034
4140
|
}
|
|
4035
4141
|
),
|
|
4036
|
-
/* @__PURE__ */
|
|
4142
|
+
/* @__PURE__ */ jsx21("button", { type: "button", className: "pt-btn", onClick: () => setReleaseOpen(false), children: ui.releaseClose })
|
|
4037
4143
|
] })
|
|
4038
4144
|
]
|
|
4039
4145
|
}
|
|
4040
4146
|
),
|
|
4041
|
-
/* @__PURE__ */
|
|
4042
|
-
saveEndpoint ? /* @__PURE__ */
|
|
4043
|
-
/* @__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(
|
|
4044
4150
|
"button",
|
|
4045
4151
|
{
|
|
4046
4152
|
type: "button",
|
|
@@ -4050,15 +4156,15 @@ function PanelApp({
|
|
|
4050
4156
|
children: save.status === "saving" ? ui.saving : ui.save
|
|
4051
4157
|
}
|
|
4052
4158
|
) }),
|
|
4053
|
-
/* @__PURE__ */
|
|
4159
|
+
/* @__PURE__ */ jsxs19("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: [
|
|
4054
4160
|
save.status === "error" ? `${ui.saveFailed}: ${save.message}` : save.status === "saved" ? ui.savedWithCommit : dirty ? ui.saveHelp : ui.upToDate,
|
|
4055
|
-
save.status === "saved" && save.url && /* @__PURE__ */
|
|
4161
|
+
save.status === "saved" && save.url && /* @__PURE__ */ jsxs19(Fragment6, { children: [
|
|
4056
4162
|
" ",
|
|
4057
|
-
/* @__PURE__ */
|
|
4163
|
+
/* @__PURE__ */ jsx21("a", { href: save.url, children: "commit" })
|
|
4058
4164
|
] })
|
|
4059
4165
|
] })
|
|
4060
|
-
] }) : /* @__PURE__ */
|
|
4061
|
-
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(
|
|
4062
4168
|
FilterChip,
|
|
4063
4169
|
{
|
|
4064
4170
|
label: LANG_LABELS[code],
|
|
@@ -4067,9 +4173,9 @@ function PanelApp({
|
|
|
4067
4173
|
},
|
|
4068
4174
|
code
|
|
4069
4175
|
)) }) }),
|
|
4070
|
-
/* @__PURE__ */
|
|
4071
|
-
/* @__PURE__ */
|
|
4072
|
-
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(
|
|
4073
4179
|
FilterChip,
|
|
4074
4180
|
{
|
|
4075
4181
|
label: entry.label,
|
|
@@ -4078,7 +4184,7 @@ function PanelApp({
|
|
|
4078
4184
|
},
|
|
4079
4185
|
name
|
|
4080
4186
|
)),
|
|
4081
|
-
state.importedTheme && /* @__PURE__ */
|
|
4187
|
+
state.importedTheme && /* @__PURE__ */ jsx21(
|
|
4082
4188
|
FilterChip,
|
|
4083
4189
|
{
|
|
4084
4190
|
label: t(state.importedTheme.label),
|
|
@@ -4087,21 +4193,21 @@ function PanelApp({
|
|
|
4087
4193
|
}
|
|
4088
4194
|
)
|
|
4089
4195
|
] }),
|
|
4090
|
-
/* @__PURE__ */
|
|
4091
|
-
state.importedTheme && /* @__PURE__ */
|
|
4092
|
-
/* @__PURE__ */
|
|
4093
|
-
/* @__PURE__ */
|
|
4094
|
-
state.importedTheme.from.colours.length > 0 && /* @__PURE__ */
|
|
4095
|
-
state.importedTheme.refreshRequested ? /* @__PURE__ */
|
|
4096
|
-
/* @__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 })
|
|
4097
4203
|
] })
|
|
4098
4204
|
] }),
|
|
4099
|
-
checkForUpdates && fingerprint?.version && /* @__PURE__ */
|
|
4100
|
-
/* @__PURE__ */
|
|
4101
|
-
/* @__PURE__ */
|
|
4102
|
-
update?.behind && (state.cards.some((card) => card.id === updateCardId(update.latest)) ? /* @__PURE__ */
|
|
4103
|
-
/* @__PURE__ */
|
|
4104
|
-
/* @__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(
|
|
4105
4211
|
"input",
|
|
4106
4212
|
{
|
|
4107
4213
|
type: "checkbox",
|
|
@@ -4109,16 +4215,16 @@ function PanelApp({
|
|
|
4109
4215
|
onChange: (event) => setPreference("updateAsOrder", event.target.checked)
|
|
4110
4216
|
}
|
|
4111
4217
|
),
|
|
4112
|
-
/* @__PURE__ */
|
|
4218
|
+
/* @__PURE__ */ jsx21("span", { className: "pt-panel-text", children: ui.updateAsOrder })
|
|
4113
4219
|
] }),
|
|
4114
|
-
/* @__PURE__ */
|
|
4220
|
+
/* @__PURE__ */ jsx21("p", { className: "pt-marketplace__detail", children: ui.updateAsOrderHow })
|
|
4115
4221
|
] }),
|
|
4116
|
-
fingerprint && /* @__PURE__ */
|
|
4117
|
-
/* @__PURE__ */
|
|
4118
|
-
/* @__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) })
|
|
4119
4225
|
] }),
|
|
4120
|
-
saveEndpoint && /* @__PURE__ */
|
|
4121
|
-
/* @__PURE__ */
|
|
4226
|
+
saveEndpoint && /* @__PURE__ */ jsxs19(DetailSection, { title: ui.session, subtitle: ui.sessionSubtitle, children: [
|
|
4227
|
+
/* @__PURE__ */ jsx21("div", { className: "pt-panel-row", children: /* @__PURE__ */ jsx21(
|
|
4122
4228
|
"button",
|
|
4123
4229
|
{
|
|
4124
4230
|
type: "button",
|
|
@@ -4128,11 +4234,11 @@ function PanelApp({
|
|
|
4128
4234
|
children: signOut === "working" ? ui.signingOut : ui.signOut
|
|
4129
4235
|
}
|
|
4130
4236
|
) }),
|
|
4131
|
-
signOut === "failed" && /* @__PURE__ */
|
|
4237
|
+
signOut === "failed" && /* @__PURE__ */ jsx21("p", { className: "pt-panel-text", style: { marginTop: 10 }, children: ui.signOutFailed })
|
|
4132
4238
|
] }),
|
|
4133
|
-
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: [
|
|
4134
4240
|
index > 0 && " \xB7 ",
|
|
4135
|
-
/* @__PURE__ */
|
|
4241
|
+
/* @__PURE__ */ jsx21("a", { href: link.href, children: link.label })
|
|
4136
4242
|
] }, link.href)) }) })
|
|
4137
4243
|
] }),
|
|
4138
4244
|
footer
|
|
@@ -4338,6 +4444,7 @@ export {
|
|
|
4338
4444
|
PanelApp,
|
|
4339
4445
|
SetupGuide,
|
|
4340
4446
|
SetupWizard,
|
|
4447
|
+
SituationRow,
|
|
4341
4448
|
StatTile,
|
|
4342
4449
|
StatTileGrid,
|
|
4343
4450
|
THEME_FORMS,
|
|
@@ -4385,6 +4492,7 @@ export {
|
|
|
4385
4492
|
useGuideNote,
|
|
4386
4493
|
useMediaQuery,
|
|
4387
4494
|
validateBoard,
|
|
4495
|
+
warRoomForm,
|
|
4388
4496
|
wizardStep,
|
|
4389
4497
|
writeText
|
|
4390
4498
|
};
|