@unbrained/pm-web 2026.8.7 → 2026.8.14

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.
Files changed (173) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/app.d.ts +16 -0
  3. package/dist/app.js +16 -0
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth.d.ts +5 -0
  6. package/dist/auth.js.map +1 -1
  7. package/dist/board.d.ts +53 -0
  8. package/dist/board.js +48 -0
  9. package/dist/board.js.map +1 -1
  10. package/dist/crypto.d.ts +23 -0
  11. package/dist/crypto.js +32 -0
  12. package/dist/crypto.js.map +1 -1
  13. package/dist/db.d.ts +19 -0
  14. package/dist/db.js +19 -0
  15. package/dist/db.js.map +1 -1
  16. package/dist/ical.d.ts +72 -0
  17. package/dist/ical.js +73 -0
  18. package/dist/ical.js.map +1 -1
  19. package/dist/index.d.ts +11 -0
  20. package/dist/index.js +52 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/middleware/auth.d.ts +8 -0
  23. package/dist/middleware/auth.js.map +1 -1
  24. package/dist/oidc.d.ts +87 -0
  25. package/dist/oidc.js +113 -0
  26. package/dist/oidc.js.map +1 -1
  27. package/dist/routes/admin.js +15 -0
  28. package/dist/routes/admin.js.map +1 -1
  29. package/dist/routes/github.js +13 -0
  30. package/dist/routes/github.js.map +1 -1
  31. package/dist/routes/oidc.d.ts +10 -0
  32. package/dist/routes/oidc.js +51 -0
  33. package/dist/routes/oidc.js.map +1 -1
  34. package/dist/routes/pm.js +132 -1
  35. package/dist/routes/pm.js.map +1 -1
  36. package/dist/routes/sharing.js +8 -0
  37. package/dist/routes/sharing.js.map +1 -1
  38. package/dist/services/mutation-event-watcher.js +13 -0
  39. package/dist/services/mutation-event-watcher.js.map +1 -1
  40. package/dist/services/pm-runner.d.ts +82 -0
  41. package/dist/services/pm-runner.js +121 -0
  42. package/dist/services/pm-runner.js.map +1 -1
  43. package/dist/services/project-watcher.d.ts +22 -0
  44. package/dist/services/project-watcher.js +51 -0
  45. package/dist/services/project-watcher.js.map +1 -1
  46. package/dist/services/realtime-bus.d.ts +46 -0
  47. package/dist/services/realtime-bus.js +59 -0
  48. package/dist/services/realtime-bus.js.map +1 -1
  49. package/dist/services/sse.d.ts +134 -0
  50. package/dist/services/sse.js +145 -0
  51. package/dist/services/sse.js.map +1 -1
  52. package/manifest.json +1 -1
  53. package/package.json +5 -3
  54. package/public/src/app.js +44 -1
  55. package/public/src/app.js.map +1 -1
  56. package/public/src/app.ts +44 -1
  57. package/public/src/components/modals.js +11 -0
  58. package/public/src/components/modals.js.map +1 -1
  59. package/public/src/components/modals.ts +11 -0
  60. package/public/src/components/toast.js +2 -0
  61. package/public/src/components/toast.js.map +1 -1
  62. package/public/src/components/toast.ts +2 -0
  63. package/public/src/constants.js +21 -4
  64. package/public/src/constants.js.map +1 -1
  65. package/public/src/constants.ts +21 -4
  66. package/public/src/filters.js +10 -7
  67. package/public/src/filters.js.map +1 -1
  68. package/public/src/filters.ts +10 -7
  69. package/public/src/i18n.js +11 -1
  70. package/public/src/i18n.js.map +1 -1
  71. package/public/src/i18n.ts +13 -1
  72. package/public/src/state.js +3 -0
  73. package/public/src/state.js.map +1 -1
  74. package/public/src/state.ts +3 -0
  75. package/public/src/sw.ts +71 -7
  76. package/public/src/theme.js +13 -1
  77. package/public/src/theme.js.map +1 -1
  78. package/public/src/theme.ts +15 -1
  79. package/public/src/types.ts +2 -0
  80. package/public/src/utils.js +26 -1
  81. package/public/src/utils.js.map +1 -1
  82. package/public/src/utils.ts +26 -1
  83. package/public/src/views/activity.js +1 -0
  84. package/public/src/views/activity.js.map +1 -1
  85. package/public/src/views/activity.ts +1 -0
  86. package/public/src/views/admin.js +134 -0
  87. package/public/src/views/admin.js.map +1 -1
  88. package/public/src/views/admin.ts +134 -0
  89. package/public/src/views/auth.js +31 -0
  90. package/public/src/views/auth.js.map +1 -1
  91. package/public/src/views/auth.ts +31 -0
  92. package/public/src/views/calendar.js +3 -0
  93. package/public/src/views/calendar.js.map +1 -1
  94. package/public/src/views/calendar.ts +3 -0
  95. package/public/src/views/comments-audit.js +1 -0
  96. package/public/src/views/comments-audit.js.map +1 -1
  97. package/public/src/views/comments-audit.ts +1 -0
  98. package/public/src/views/config.js +67 -0
  99. package/public/src/views/config.js.map +1 -1
  100. package/public/src/views/config.ts +67 -0
  101. package/public/src/views/context.js +2 -0
  102. package/public/src/views/context.js.map +1 -1
  103. package/public/src/views/context.ts +2 -0
  104. package/public/src/views/create.js +3 -0
  105. package/public/src/views/create.js.map +1 -1
  106. package/public/src/views/create.ts +3 -0
  107. package/public/src/views/dedupe.js +1 -0
  108. package/public/src/views/dedupe.js.map +1 -1
  109. package/public/src/views/dedupe.ts +1 -0
  110. package/public/src/views/export.js +6 -0
  111. package/public/src/views/export.js.map +1 -1
  112. package/public/src/views/export.ts +6 -0
  113. package/public/src/views/github.js +58 -0
  114. package/public/src/views/github.js.map +1 -1
  115. package/public/src/views/github.ts +58 -0
  116. package/public/src/views/graph-canvas.js +18 -0
  117. package/public/src/views/graph-canvas.js.map +1 -1
  118. package/public/src/views/graph-canvas.ts +20 -0
  119. package/public/src/views/graph.js +41 -0
  120. package/public/src/views/graph.js.map +1 -1
  121. package/public/src/views/graph.ts +42 -1
  122. package/public/src/views/groups.js +45 -0
  123. package/public/src/views/groups.js.map +1 -1
  124. package/public/src/views/groups.ts +45 -0
  125. package/public/src/views/guide.js +3 -0
  126. package/public/src/views/guide.js.map +1 -1
  127. package/public/src/views/guide.ts +3 -0
  128. package/public/src/views/health.js +3 -0
  129. package/public/src/views/health.js.map +1 -1
  130. package/public/src/views/health.ts +3 -0
  131. package/public/src/views/items.js +196 -6
  132. package/public/src/views/items.js.map +1 -1
  133. package/public/src/views/items.ts +196 -6
  134. package/public/src/views/normalize.js +2 -0
  135. package/public/src/views/normalize.js.map +1 -1
  136. package/public/src/views/normalize.ts +2 -0
  137. package/public/src/views/packages.js +41 -0
  138. package/public/src/views/packages.js.map +1 -1
  139. package/public/src/views/packages.ts +41 -0
  140. package/public/src/views/plan-execution.js +6 -0
  141. package/public/src/views/plan-execution.js.map +1 -1
  142. package/public/src/views/plan-execution.ts +8 -0
  143. package/public/src/views/plan.js +145 -0
  144. package/public/src/views/plan.js.map +1 -1
  145. package/public/src/views/plan.ts +146 -1
  146. package/public/src/views/projects.js +60 -0
  147. package/public/src/views/projects.js.map +1 -1
  148. package/public/src/views/projects.ts +60 -0
  149. package/public/src/views/router.js +43 -0
  150. package/public/src/views/router.js.map +1 -1
  151. package/public/src/views/router.ts +43 -0
  152. package/public/src/views/search.js +5 -0
  153. package/public/src/views/search.js.map +1 -1
  154. package/public/src/views/search.ts +5 -0
  155. package/public/src/views/settings.js +36 -0
  156. package/public/src/views/settings.js.map +1 -1
  157. package/public/src/views/settings.ts +36 -0
  158. package/public/src/views/shared.js +1 -0
  159. package/public/src/views/shared.js.map +1 -1
  160. package/public/src/views/shared.ts +1 -0
  161. package/public/src/views/sharing.js +32 -0
  162. package/public/src/views/sharing.js.map +1 -1
  163. package/public/src/views/sharing.ts +32 -0
  164. package/public/src/views/stats.js +1 -0
  165. package/public/src/views/stats.js.map +1 -1
  166. package/public/src/views/stats.ts +1 -0
  167. package/public/src/views/templates.js +4 -0
  168. package/public/src/views/templates.js.map +1 -1
  169. package/public/src/views/templates.ts +4 -0
  170. package/public/src/views/validate.js +1 -0
  171. package/public/src/views/validate.js.map +1 -1
  172. package/public/src/views/validate.ts +1 -0
  173. package/public/sw.js +60 -5
@@ -8,6 +8,8 @@
8
8
  // preference) is "auto", matching the data-theme="auto" attribute in the HTML
9
9
  // shell so there is no flash of the wrong theme on load.
10
10
 
11
+ /** The user-selectable theme modes: an explicit `dark` or `light`, or `auto`
12
+ * which follows the OS `prefers-color-scheme` setting. */
11
13
  export type Theme = 'dark' | 'light' | 'auto';
12
14
 
13
15
  const STORAGE_KEY = 'pm-web-theme';
@@ -26,6 +28,9 @@ const LABEL: Record<Theme, string> = {
26
28
  dark: 'Theme: dark',
27
29
  };
28
30
 
31
+ /** Read the persisted theme choice from localStorage, defaulting to `auto`
32
+ * when no preference is stored or when localStorage is unavailable (e.g.
33
+ * private browsing). */
29
34
  export function getStoredTheme(): Theme {
30
35
  try {
31
36
  const v = localStorage.getItem(STORAGE_KEY);
@@ -34,6 +39,9 @@ export function getStoredTheme(): Theme {
34
39
  return 'auto';
35
40
  }
36
41
 
42
+ /** Apply a theme to the page: set `data-theme` on `<html>`, update the toggle
43
+ * button's glyph/title, and sync the `<meta name="theme-color">` tag so the
44
+ * mobile browser chrome matches the chosen palette. */
37
45
  export function applyTheme(theme: Theme): void {
38
46
  document.documentElement.setAttribute('data-theme', theme);
39
47
  const btn = document.getElementById('theme-toggle');
@@ -54,18 +62,24 @@ export function applyTheme(theme: Theme): void {
54
62
  }
55
63
  }
56
64
 
65
+ /** Persist a theme choice to localStorage and immediately apply it to the
66
+ * document. */
57
67
  export function setTheme(theme: Theme): void {
58
68
  try { localStorage.setItem(STORAGE_KEY, theme); } catch { /* ignore */ }
59
69
  applyTheme(theme);
60
70
  }
61
71
 
72
+ /** Advance to the next theme in the auto → light → dark order (wrapping
73
+ * around) and persist plus apply the new selection. */
62
74
  export function cycleTheme(): void {
63
75
  const current = getStoredTheme();
64
76
  const next = ORDER[(ORDER.indexOf(current) + 1) % ORDER.length];
65
77
  setTheme(next);
66
78
  }
67
79
 
68
- // Apply the persisted (or default) theme as early as possible.
80
+ /** Apply the persisted (or default) theme early to avoid a flash of the wrong
81
+ * palette, then register a listener so `auto` mode tracks live OS theme
82
+ * changes. */
69
83
  export function initTheme(): void {
70
84
  applyTheme(getStoredTheme());
71
85
  // When in auto mode, react to live OS theme changes.
@@ -2,6 +2,7 @@
2
2
  // TYPES
3
3
  // ═══════════════════════════════════════════════════════════════
4
4
 
5
+ /** The signed-in application user, as returned by the auth/session endpoints. */
5
6
  export interface User {
6
7
  id: string;
7
8
  email: string;
@@ -255,6 +256,7 @@ export interface AdminGroup {
255
256
 
256
257
  export type ToastType = 'info' | 'success' | 'error';
257
258
 
259
+ /** Union of every navigation view key the SPA router can display. */
258
260
  export type ViewName =
259
261
  | 'projects' | 'items' | 'create' | 'activity' | 'search'
260
262
  | 'stats' | 'calendar' | 'context' | 'graph' | 'sharing' | 'groups'
@@ -2,23 +2,41 @@
2
2
  // UTILITIES
3
3
  // ═══════════════════════════════════════════════════════════════
4
4
  import { PRIORITY_LABELS, TYPE_ICONS } from './constants.js';
5
+ /** Escape `&`, `<`, `>` and `"` so a value can be inserted into HTML text or a
6
+ * double-quoted attribute. Falsy input yields an empty string.
7
+ *
8
+ * NOT sufficient for a JavaScript context. It does not escape `'`, and even if
9
+ * it did, the browser HTML-decodes an attribute value before the JS parser sees
10
+ * it, so an entity cannot keep a quote from terminating a string literal. A
11
+ * value interpolated into an inline handler — `onclick="fn('${escHtml(x)}')"` —
12
+ * is therefore still injectable. Pass such values through a `data-*` attribute
13
+ * and bind with `addEventListener` instead. */
5
14
  export function escHtml(s) {
6
15
  if (!s)
7
16
  return '';
8
17
  return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
9
18
  }
19
+ /** Build a colored status-badge span for an item status, mapping the
20
+ * `in_progress` code to "In Progress" and CSS-classifying the rest by slug. */
10
21
  export function statusBadge(s) {
11
22
  const labels = { in_progress: 'In Progress' };
12
23
  const status = String(s || 'unknown');
13
24
  const classSuffix = status.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
14
25
  return `<span class="status-badge status-${classSuffix}">${escHtml(labels[status] || status)}</span>`;
15
26
  }
27
+ /** Render a priority indicator span (P0–P4) whose color class and tooltip
28
+ * label come from the PRIORITY_LABELS lookup table. */
16
29
  export function priorityDot(p) {
17
30
  return `<span class="priority-dot priority-${p}" title="P${p}: ${PRIORITY_LABELS[p] || ''}"></span>`;
18
31
  }
32
+ /** Render an item-type glyph span using the TYPE_ICONS map, falling back to
33
+ * the middle-dot character when the type has no assigned icon. */
19
34
  export function typeIcon(t) {
20
- return `<span class="item-type-icon" title="${t}">${TYPE_ICONS[t] || '·'}</span>`;
35
+ return `<span class="item-type-icon" title="${escHtml(t)}">${TYPE_ICONS[t] || '·'}</span>`;
21
36
  }
37
+ /** Format a timestamp as a short relative phrase ("just now", "5m ago",
38
+ * "3h ago", "2d ago") or, past a week, a localized calendar date. Falsy or
39
+ * unparseable input returns an empty string. */
22
40
  export function relTime(ts) {
23
41
  if (!ts)
24
42
  return '';
@@ -35,11 +53,16 @@ export function relTime(ts) {
35
53
  return `${Math.floor(s / 86400)}d ago`;
36
54
  return d.toLocaleDateString();
37
55
  }
56
+ /** Format a timestamp as a US-style short date (e.g. "Jan 5, 2026"). Falsy
57
+ * input returns an empty string. */
38
58
  export function fmtDate(ts) {
39
59
  if (!ts)
40
60
  return '';
41
61
  return new Date(ts).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
42
62
  }
63
+ /** Toggle a button's disabled state and, when `text` is supplied, update the
64
+ * button label — replacing the first inner span when present, otherwise the
65
+ * whole text content. */
43
66
  export function setLoading(btn, yes, text) {
44
67
  btn.disabled = yes;
45
68
  if (text) {
@@ -50,9 +73,11 @@ export function setLoading(btn, yes, text) {
50
73
  btn.textContent = text;
51
74
  }
52
75
  }
76
+ /** Build an HTML string of `n` placeholder skeleton rows for loading states. */
53
77
  export function skeletonRows(n = 5) {
54
78
  return Array.from({ length: n }, () => '<div class="skeleton skeleton-row"></div>').join('');
55
79
  }
80
+ /** Build an HTML string of `n` placeholder skeleton cards for loading states. */
56
81
  export function skeletonCards(n = 3) {
57
82
  return Array.from({ length: n }, () => '<div class="skeleton skeleton-card"></div>').join('');
58
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,22 @@
3
3
  // ═══════════════════════════════════════════════════════════════
4
4
  import { PRIORITY_LABELS, TYPE_ICONS } from './constants.js';
5
5
 
6
+ /** Escape `&`, `<`, `>` and `"` so a value can be inserted into HTML text or a
7
+ * double-quoted attribute. Falsy input yields an empty string.
8
+ *
9
+ * NOT sufficient for a JavaScript context. It does not escape `'`, and even if
10
+ * it did, the browser HTML-decodes an attribute value before the JS parser sees
11
+ * it, so an entity cannot keep a quote from terminating a string literal. A
12
+ * value interpolated into an inline handler — `onclick="fn('${escHtml(x)}')"` —
13
+ * is therefore still injectable. Pass such values through a `data-*` attribute
14
+ * and bind with `addEventListener` instead. */
6
15
  export function escHtml(s: string | undefined | null): string {
7
16
  if (!s) return '';
8
17
  return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
9
18
  }
10
19
 
20
+ /** Build a colored status-badge span for an item status, mapping the
21
+ * `in_progress` code to "In Progress" and CSS-classifying the rest by slug. */
11
22
  export function statusBadge(s: string): string {
12
23
  const labels: Record<string, string> = { in_progress: 'In Progress' };
13
24
  const status = String(s || 'unknown');
@@ -15,14 +26,21 @@ export function statusBadge(s: string): string {
15
26
  return `<span class="status-badge status-${classSuffix}">${escHtml(labels[status] || status)}</span>`;
16
27
  }
17
28
 
29
+ /** Render a priority indicator span (P0–P4) whose color class and tooltip
30
+ * label come from the PRIORITY_LABELS lookup table. */
18
31
  export function priorityDot(p: number): string {
19
32
  return `<span class="priority-dot priority-${p}" title="P${p}: ${PRIORITY_LABELS[p]||''}"></span>`;
20
33
  }
21
34
 
35
+ /** Render an item-type glyph span using the TYPE_ICONS map, falling back to
36
+ * the middle-dot character when the type has no assigned icon. */
22
37
  export function typeIcon(t: string): string {
23
- return `<span class="item-type-icon" title="${t}">${TYPE_ICONS[t]||'·'}</span>`;
38
+ return `<span class="item-type-icon" title="${escHtml(t)}">${TYPE_ICONS[t]||'·'}</span>`;
24
39
  }
25
40
 
41
+ /** Format a timestamp as a short relative phrase ("just now", "5m ago",
42
+ * "3h ago", "2d ago") or, past a week, a localized calendar date. Falsy or
43
+ * unparseable input returns an empty string. */
26
44
  export function relTime(ts: string | undefined | null): string {
27
45
  if (!ts) return '';
28
46
  const d = new Date(ts);
@@ -35,11 +53,16 @@ export function relTime(ts: string | undefined | null): string {
35
53
  return d.toLocaleDateString();
36
54
  }
37
55
 
56
+ /** Format a timestamp as a US-style short date (e.g. "Jan 5, 2026"). Falsy
57
+ * input returns an empty string. */
38
58
  export function fmtDate(ts: string | undefined | null): string {
39
59
  if (!ts) return '';
40
60
  return new Date(ts).toLocaleDateString('en-US', { year:'numeric', month:'short', day:'numeric' });
41
61
  }
42
62
 
63
+ /** Toggle a button's disabled state and, when `text` is supplied, update the
64
+ * button label — replacing the first inner span when present, otherwise the
65
+ * whole text content. */
43
66
  export function setLoading(btn: HTMLButtonElement, yes: boolean, text?: string): void {
44
67
  btn.disabled = yes;
45
68
  if (text) {
@@ -49,10 +72,12 @@ export function setLoading(btn: HTMLButtonElement, yes: boolean, text?: string):
49
72
  }
50
73
  }
51
74
 
75
+ /** Build an HTML string of `n` placeholder skeleton rows for loading states. */
52
76
  export function skeletonRows(n = 5): string {
53
77
  return Array.from({length: n}, () => '<div class="skeleton skeleton-row"></div>').join('');
54
78
  }
55
79
 
80
+ /** Build an HTML string of `n` placeholder skeleton cards for loading states. */
56
81
  export function skeletonCards(n = 3): string {
57
82
  return Array.from({length: n}, () => '<div class="skeleton skeleton-card"></div>').join('');
58
83
  }
@@ -5,6 +5,7 @@ import { state } from '../state.js';
5
5
  import { api } from '../api.js';
6
6
  import { escHtml, relTime } from '../utils.js';
7
7
  import { TYPE_ICONS } from '../constants.js';
8
+ /** Renders the activity feed for the current project, listing recent changes with their type icon, a description or fallback, and a relative timestamp. */
8
9
  export async function renderActivityView() {
9
10
  const el = document.getElementById('content-activity');
10
11
  if (!el)
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["activity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gBAAgB;AAChB,kEAAkE;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAAC,EAAE,CAAC,SAAS,GAAG,wFAAwF,CAAC;QAAC,OAAO;IAAC,CAAC;IAC/I,EAAE,CAAC,SAAS,GAAG;;gGAE+E,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;;;iJAGe,CAAC;IAEhJ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAmB,KAAK,EAAC,aAAa,KAAK,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAoB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,yHAAyH,CAAC;YAC7I,OAAO;QACT,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAA;;qCAED,UAAU,CAAC,CAAC,CAAC,IAAI,IAAE,EAAE,CAAC,IAAE,GAAG;;uCAEzB,OAAO,CAAC,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,MAAM,IAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;uCACxD,OAAO,CAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA,CAAC,CAAA,+CAA+C,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAA,CAAC,CAAA,EAAE;;aAE7I,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAAC,OAAM,GAAY,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,MAAM;YAAE,MAAM,CAAC,SAAS,GAAG,iEAAiE,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;IAC1K,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["activity.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gBAAgB;AAChB,kEAAkE;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,2JAA2J;AAC3J,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAAC,EAAE,CAAC,SAAS,GAAG,wFAAwF,CAAC;QAAC,OAAO;IAAC,CAAC;IAC/I,EAAE,CAAC,SAAS,GAAG;;gGAE+E,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;;;iJAGe,CAAC;IAEhJ,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAmB,KAAK,EAAC,aAAa,KAAK,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAoB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,yHAAyH,CAAC;YAC7I,OAAO;QACT,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAA;;qCAED,UAAU,CAAC,CAAC,CAAC,IAAI,IAAE,EAAE,CAAC,IAAE,GAAG;;uCAEzB,OAAO,CAAC,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,MAAM,IAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;uCACxD,OAAO,CAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA,CAAC,CAAA,+CAA+C,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAA,CAAC,CAAA,EAAE;;aAE7I,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAAC,OAAM,GAAY,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,MAAM;YAAE,MAAM,CAAC,SAAS,GAAG,iEAAiE,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC;IAC1K,CAAC;AACH,CAAC"}
@@ -7,6 +7,7 @@ import { escHtml, relTime } from '../utils.js';
7
7
  import { TYPE_ICONS } from '../constants.js';
8
8
  import type { ActivityEntry, ActivityResponse } from '../api-types.js';
9
9
 
10
+ /** Renders the activity feed for the current project, listing recent changes with their type icon, a description or fallback, and a relative timestamp. */
10
11
  export async function renderActivityView(): Promise<void> {
11
12
  const el = document.getElementById('content-activity');
12
13
  if (!el) return;
@@ -6,6 +6,12 @@ import { confirmDialog, createModal, showModal, hideModal } from '../components/
6
6
  function getAuditActor(entry) {
7
7
  return entry.actor_name || entry.actor_email || entry.userId || entry.userEmail || '—';
8
8
  }
9
+ /**
10
+ * Maps raw audit-log API entries into the AuditEntry shape used by the admin
11
+ * view, copying only the fields the UI consumes and dropping the rest.
12
+ * @param entries - Raw entries returned by GET /admin/audit.
13
+ * @returns Normalized audit entries for rendering.
14
+ */
9
15
  function normalizeAuditEntries(entries) {
10
16
  return entries.map((entry) => ({
11
17
  id: entry.id,
@@ -16,6 +22,13 @@ function normalizeAuditEntries(entries) {
16
22
  created_at: entry.created_at,
17
23
  }));
18
24
  }
25
+ /**
26
+ * Resolves a human-readable description for one audit entry, preferring the
27
+ * explicit description, then "{action} by {userId}", then the bare action,
28
+ * falling back to an em-dash when nothing is available.
29
+ * @param entry - The audit entry to describe.
30
+ * @returns The best available description string.
31
+ */
19
32
  function getAuditDescription(entry) {
20
33
  if (entry.description)
21
34
  return entry.description;
@@ -34,6 +47,13 @@ let auditFilter = '';
34
47
  let currentPage = 1;
35
48
  const PAGE_SIZE = 20;
36
49
  let adminAuditTotal = 0;
50
+ /**
51
+ * Loads one page of audit-log entries from the admin API into module state
52
+ * (a no-op unless the current user is an admin). Computes the offset from the
53
+ * page number, normalizes the returned entries, and records the total count
54
+ * and current page.
55
+ * @param page - 1-based page index; clamped to a minimum of 1.
56
+ */
37
57
  async function loadAuditData(page = 1) {
38
58
  if (!state.user?.is_admin)
39
59
  return;
@@ -48,6 +68,14 @@ function paginate(items, page) {
48
68
  const start = (page - 1) * PAGE_SIZE;
49
69
  return items.slice(start, start + PAGE_SIZE);
50
70
  }
71
+ /**
72
+ * Builds the HTML for the prev/next pagination controls for a result set,
73
+ * showing the current page out of the total and the item count. Returns an
74
+ * empty string when there is only a single page so callers render nothing.
75
+ * @param totalItems - Total number of items being paginated.
76
+ * @param currentPg - The page currently in view.
77
+ * @returns Pagination markup, or an empty string for a single page.
78
+ */
51
79
  function renderPagination(totalItems, currentPg, hook) {
52
80
  const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
53
81
  if (totalPages <= 1)
@@ -61,6 +89,13 @@ function renderPagination(totalItems, currentPg, hook) {
61
89
  </div>
62
90
  </div>`;
63
91
  }
92
+ /**
93
+ * Renders one admin user as an HTML table row, showing the display name and
94
+ * email, an admin/user role pill, GitHub connection status, the creation
95
+ * date, and buttons to toggle the admin role and delete the user.
96
+ * @param user - The user record to render.
97
+ * @returns A `<tr>` markup string.
98
+ */
64
99
  function renderUserRow(user) {
65
100
  return `
66
101
  <tr>
@@ -83,6 +118,13 @@ function renderUserRow(user) {
83
118
  </td>
84
119
  </tr>`;
85
120
  }
121
+ /**
122
+ * Renders one admin project as an HTML table row, showing the name, slug and
123
+ * prefix, the owner, the linked GitHub repo (or "Not linked"), sync status,
124
+ * the creation date, and a delete button.
125
+ * @param project - The project record to render.
126
+ * @returns A `<tr>` markup string.
127
+ */
86
128
  function renderProjectRow(project) {
87
129
  const repo = project.github_owner && project.github_repo ? `${project.github_owner}/${project.github_repo}` : 'Not linked';
88
130
  return `
@@ -102,6 +144,13 @@ function renderProjectRow(project) {
102
144
  </td>
103
145
  </tr>`;
104
146
  }
147
+ /**
148
+ * Renders one audit-log entry as an HTML table row, showing the resolved
149
+ * actor, an action pill, the target, a truncated details string, and a
150
+ * localized timestamp.
151
+ * @param entry - The audit entry to render.
152
+ * @returns A `<tr>` markup string.
153
+ */
105
154
  function renderAuditRow(entry) {
106
155
  const actor = getAuditActor(entry);
107
156
  const details = getAuditDescription(entry);
@@ -114,6 +163,12 @@ function renderAuditRow(entry) {
114
163
  <td style="white-space:nowrap">${entry.created_at ? new Date(entry.created_at).toLocaleString() : entry.timestamp ? new Date(entry.timestamp).toLocaleString() : '—'}</td>
115
164
  </tr>`;
116
165
  }
166
+ /**
167
+ * Renders one admin group as an HTML card, showing the group name, owner
168
+ * email and member count, an optional description, and a delete button.
169
+ * @param group - The group record to render.
170
+ * @returns A card markup string.
171
+ */
117
172
  function renderGroupCard(group) {
118
173
  return `
119
174
  <div class="admin-group-card">
@@ -125,6 +180,13 @@ function renderGroupCard(group) {
125
180
  ${group.description ? `<p>${escHtml(group.description)}</p>` : ''}
126
181
  </div>`;
127
182
  }
183
+ /**
184
+ * Formats a duration given in seconds into a compact uptime string expressed
185
+ * in hours and minutes (e.g. "3h 12m"), or minutes only (e.g. "5m") when
186
+ * under an hour.
187
+ * @param seconds - Elapsed seconds to format.
188
+ * @returns The formatted uptime string.
189
+ */
128
190
  function formatUptime(seconds) {
129
191
  const h = Math.floor(seconds / 3600);
130
192
  const m = Math.floor((seconds % 3600) / 60);
@@ -132,6 +194,14 @@ function formatUptime(seconds) {
132
194
  return `${h}h ${m}m`;
133
195
  return `${m}m`;
134
196
  }
197
+ /**
198
+ * Renders the full admin view markup from the overview data, applying the
199
+ * current user/project/audit search filters and paging the active tab's list.
200
+ * Includes the header, stat cards, tab bar, and the section for the active
201
+ * tab (users, projects, groups, or audit).
202
+ * @param data - The admin overview (users, projects, groups, and stats).
203
+ * @returns The admin view HTML string.
204
+ */
135
205
  function renderAdmin(data) {
136
206
  // Filter users
137
207
  const filteredUsers = data.users.filter(u => !userFilter || u.email.toLowerCase().includes(userFilter.toLowerCase()) || (u.display_name || '').toLowerCase().includes(userFilter.toLowerCase()));
@@ -247,6 +317,12 @@ function renderAdmin(data) {
247
317
  ${renderPagination(adminAuditTotal, currentPage, 'audit')}`}
248
318
  </section>` : ''}`;
249
319
  }
320
+ /**
321
+ * Mounts the admin view into the #content-admin element. Shows an
322
+ * access-denied state for non-admins, otherwise a loading spinner while it
323
+ * fetches the overview (and the current audit page when on the audit tab) and
324
+ * renders it, surfacing fetch failures in an empty-state block.
325
+ */
250
326
  export async function renderAdminView() {
251
327
  const el = document.getElementById('content-admin');
252
328
  if (!el)
@@ -267,6 +343,12 @@ export async function renderAdminView() {
267
343
  el.innerHTML = `<div class="empty-state"><div class="empty-state-text">Admin failed: ${escHtml(err instanceof Error ? err.message : String(err))}</div></div>`;
268
344
  }
269
345
  }
346
+ /**
347
+ * Toggles a user's admin flag via the admin API, shows a success or error
348
+ * toast, and re-renders the admin view.
349
+ * @param userId - The id of the user to update.
350
+ * @param isAdmin - The desired admin flag.
351
+ */
270
352
  export async function setAdminRole(userId, isAdmin) {
271
353
  try {
272
354
  await api('PATCH', `/admin/users/${encodeURIComponent(userId)}`, { isAdmin });
@@ -277,6 +359,12 @@ export async function setAdminRole(userId, isAdmin) {
277
359
  toast(err instanceof Error ? err.message : String(err), 'error');
278
360
  }
279
361
  }
362
+ /**
363
+ * Switches the active admin tab and resets to the first page. For the audit
364
+ * tab it reloads the first audit page before re-rendering; for other tabs it
365
+ * re-renders from the cached overview.
366
+ * @param tab - The tab to activate.
367
+ */
280
368
  export function adminSwitchTab(tab) {
281
369
  adminTab = tab;
282
370
  currentPage = 1;
@@ -297,6 +385,11 @@ export function adminSwitchTab(tab) {
297
385
  el.innerHTML = renderAdmin(adminData);
298
386
  }
299
387
  }
388
+ /**
389
+ * Updates the user search filter from the filter input, resets to the first
390
+ * page, and re-renders the cached admin view.
391
+ * @param filter - Case-insensitive substring matched against user fields.
392
+ */
300
393
  export function adminFilterUsers(filter) {
301
394
  userFilter = filter;
302
395
  currentPage = 1;
@@ -306,6 +399,11 @@ export function adminFilterUsers(filter) {
306
399
  el.innerHTML = renderAdmin(adminData);
307
400
  }
308
401
  }
402
+ /**
403
+ * Updates the project search filter from the filter input, resets to the
404
+ * first page, and re-renders the cached admin view.
405
+ * @param filter - Case-insensitive substring matched against project fields.
406
+ */
309
407
  export function adminFilterProjects(filter) {
310
408
  projectFilter = filter;
311
409
  currentPage = 1;
@@ -315,6 +413,12 @@ export function adminFilterProjects(filter) {
315
413
  el.innerHTML = renderAdmin(adminData);
316
414
  }
317
415
  }
416
+ /**
417
+ * Updates the audit-log search filter from the filter input, resets to the
418
+ * first page, and reloads the first audit page before re-rendering when the
419
+ * audit tab is active.
420
+ * @param filter - Case-insensitive substring matched against audit fields.
421
+ */
318
422
  export function adminFilterAudit(filter) {
319
423
  auditFilter = filter;
320
424
  currentPage = 1;
@@ -334,6 +438,13 @@ export function adminFilterAudit(filter) {
334
438
  el.innerHTML = renderAdmin(adminData);
335
439
  }
336
440
  }
441
+ /**
442
+ * Navigates the active tab to the given page. Does nothing for negative pages
443
+ * or when no overview is cached. For the audit tab it loads the requested
444
+ * audit page; otherwise it clamps the page to the filtered total and
445
+ * re-renders.
446
+ * @param page - The 1-based page to navigate to.
447
+ */
337
448
  export async function adminSetPage(page) {
338
449
  if (page < 1)
339
450
  return;
@@ -357,6 +468,12 @@ export async function adminSetPage(page) {
357
468
  if (el)
358
469
  el.innerHTML = renderAdmin(adminData);
359
470
  }
471
+ /**
472
+ * Prompts for confirmation, then deletes the user via the admin API, shows a
473
+ * toast, and re-renders the admin view.
474
+ * @param userId - The id of the user to delete.
475
+ * @param userName - Display name used in the confirmation prompt.
476
+ */
360
477
  export async function adminDeleteUser(userId, userName) {
361
478
  confirmDialog(`Delete user "${userName}"?`, 'This action cannot be undone. The user will be permanently removed.', async () => {
362
479
  try {
@@ -369,6 +486,12 @@ export async function adminDeleteUser(userId, userName) {
369
486
  }
370
487
  }, true);
371
488
  }
489
+ /**
490
+ * Prompts for confirmation, then deletes the project and its items via the
491
+ * admin API, shows a toast, and re-renders the admin view.
492
+ * @param projectId - The id of the project to delete.
493
+ * @param projectName - Display name used in the confirmation prompt.
494
+ */
372
495
  export async function adminDeleteProject(projectId, projectName) {
373
496
  confirmDialog(`Delete project "${projectName}"?`, 'This will permanently delete the project and all its items. This action cannot be undone.', async () => {
374
497
  try {
@@ -381,6 +504,12 @@ export async function adminDeleteProject(projectId, projectName) {
381
504
  }
382
505
  }, true);
383
506
  }
507
+ /**
508
+ * Prompts for confirmation, then deletes the group and its memberships via
509
+ * the admin API, shows a toast, and re-renders the admin view.
510
+ * @param groupId - The id of the group to delete.
511
+ * @param groupName - Display name used in the confirmation prompt.
512
+ */
384
513
  export async function adminDeleteGroup(groupId, groupName) {
385
514
  confirmDialog(`Delete group "${groupName}"?`, 'This will permanently remove the group and all its memberships.', async () => {
386
515
  try {
@@ -393,6 +522,11 @@ export async function adminDeleteGroup(groupId, groupName) {
393
522
  }
394
523
  }, true);
395
524
  }
525
+ /**
526
+ * Opens a modal form to create a new group. On submit it validates that a name
527
+ * was entered, POSTs the group to the admin API, shows a toast, closes the
528
+ * modal, and re-renders the admin view.
529
+ */
396
530
  export function adminCreateGroup() {
397
531
  const id = 'admin-create-group-' + Date.now();
398
532
  createModal(id, 'Create Group', `
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sourceRoot":"","sources":["admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["admin.ts"],"names":[],"mappings":"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"}