duaer-spec 0.27.2 → 0.27.3

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 (55) hide show
  1. package/.duaer/active-job.json +3 -3
  2. package/.duaer/specs/281-release-0272/delivery.json +8 -0
  3. package/.duaer/specs/281-release-0272/tasks.md +1 -1
  4. package/.duaer/specs/282-dispatch-confirm-lock/delivery.json +12 -0
  5. package/.duaer/specs/282-dispatch-confirm-lock/spec.md +26 -0
  6. package/.duaer/specs/282-dispatch-confirm-lock/tasks.md +5 -0
  7. package/.duaer/specs/283-desk-theme-compact/delivery.json +12 -0
  8. package/.duaer/specs/283-desk-theme-compact/spec.md +26 -0
  9. package/.duaer/specs/283-desk-theme-compact/tasks.md +5 -0
  10. package/.duaer/specs/284-dispatch-graph-regen/delivery.json +12 -0
  11. package/.duaer/specs/284-dispatch-graph-regen/spec.md +33 -0
  12. package/.duaer/specs/284-dispatch-graph-regen/tasks.md +5 -0
  13. package/.duaer/specs/285-desk-light-compact/delivery.json +11 -0
  14. package/.duaer/specs/285-desk-light-compact/spec.md +13 -0
  15. package/.duaer/specs/285-desk-light-compact/tasks.md +5 -0
  16. package/.duaer/specs/286-modules-bug-theme/delivery.json +10 -0
  17. package/.duaer/specs/286-modules-bug-theme/spec.md +26 -0
  18. package/.duaer/specs/286-modules-bug-theme/tasks.md +5 -0
  19. package/.duaer/specs/287-progress-modules-ux/delivery.json +10 -0
  20. package/.duaer/specs/287-progress-modules-ux/spec.md +31 -0
  21. package/.duaer/specs/287-progress-modules-ux/tasks.md +5 -0
  22. package/.duaer/specs/288-settings-close-compact/delivery.json +10 -0
  23. package/.duaer/specs/288-settings-close-compact/spec.md +17 -0
  24. package/.duaer/specs/288-settings-close-compact/tasks.md +5 -0
  25. package/.duaer/specs/289-settings-close-click/delivery.json +10 -0
  26. package/.duaer/specs/289-settings-close-click/spec.md +16 -0
  27. package/.duaer/specs/289-settings-close-click/tasks.md +4 -0
  28. package/.duaer/specs/290-remove-quicknav/delivery.json +10 -0
  29. package/.duaer/specs/290-remove-quicknav/spec.md +11 -0
  30. package/.duaer/specs/290-remove-quicknav/tasks.md +4 -0
  31. package/.duaer/specs/291-release-0273/spec.md +12 -0
  32. package/.duaer/specs/291-release-0273/tasks.md +4 -0
  33. package/CHANGELOG.md +56 -0
  34. package/bin/duaer-live.mjs +11 -20
  35. package/bin/live-modules.mjs +23 -3
  36. package/docs/agent/e2e-test-plan.md +16 -5
  37. package/docs/agent/live-desk.md +24 -11
  38. package/package.json +1 -1
  39. package/web/live-dev/app.js +329 -167
  40. package/web/live-dev/dispatch-center.html +29 -1
  41. package/web/live-dev/dispatch-center.js +25 -1
  42. package/web/live-dev/i18n-de.js +5 -0
  43. package/web/live-dev/i18n-es.js +5 -0
  44. package/web/live-dev/i18n-fr.js +5 -0
  45. package/web/live-dev/i18n-ja.js +5 -0
  46. package/web/live-dev/i18n-ko.js +5 -0
  47. package/web/live-dev/i18n-pt-BR.js +5 -0
  48. package/web/live-dev/i18n-ru.js +5 -0
  49. package/web/live-dev/i18n-vi.js +5 -0
  50. package/web/live-dev/i18n-zh-TW.js +5 -0
  51. package/web/live-dev/i18n.js +10 -0
  52. package/web/live-dev/index.html +31 -32
  53. package/web/live-dev/styles.css +296 -315
  54. package/web/live-dev/task-graph.mjs +4 -1
  55. package/web/live-dev/theme.mjs +63 -0
@@ -216,7 +216,10 @@ export function buildPreviewPoolForBug(modules) {
216
216
  const list = (Array.isArray(modules) ? modules : []).filter(
217
217
  (m) => m && m.status === "confirmed",
218
218
  );
219
- const m = list[0] || { id: "bug", title: "Bug", card: {} };
219
+ const m =
220
+ list.find((x) => x.id === "bug") ||
221
+ list[0] ||
222
+ { id: "bug", title: "Bug", card: {} };
220
223
  const title = String(m.title || m.id || "Bug").slice(0, 80);
221
224
  const card = m.card && typeof m.card === "object" ? m.card : {};
222
225
  const tasks = [];
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Desk color theme: light | dark (persisted).
3
+ * Apply `data-theme` on <html> before paint via the head boot script.
4
+ */
5
+
6
+ const STORAGE_KEY = "duaer.live.theme";
7
+
8
+ /** @returns {"light"|"dark"} */
9
+ export function getTheme() {
10
+ const attr = document.documentElement.getAttribute("data-theme");
11
+ if (attr === "light" || attr === "dark") return attr;
12
+ return "dark";
13
+ }
14
+
15
+ /**
16
+ * @param {"light"|"dark"} theme
17
+ */
18
+ export function setTheme(theme) {
19
+ const next = theme === "light" ? "light" : "dark";
20
+ document.documentElement.setAttribute("data-theme", next);
21
+ try {
22
+ localStorage.setItem(STORAGE_KEY, next);
23
+ } catch {
24
+ /* ignore */
25
+ }
26
+ document.dispatchEvent(
27
+ new CustomEvent("duaer-theme", { detail: { theme: next } }),
28
+ );
29
+ }
30
+
31
+ export function toggleTheme() {
32
+ setTheme(getTheme() === "light" ? "dark" : "light");
33
+ }
34
+
35
+ /**
36
+ * Resolve initial theme: stored → system preference → dark.
37
+ * @returns {"light"|"dark"}
38
+ */
39
+ export function resolveInitialTheme() {
40
+ try {
41
+ const stored = localStorage.getItem(STORAGE_KEY);
42
+ if (stored === "light" || stored === "dark") return stored;
43
+ } catch {
44
+ /* ignore */
45
+ }
46
+ try {
47
+ if (window.matchMedia("(prefers-color-scheme: light)").matches) {
48
+ return "light";
49
+ }
50
+ } catch {
51
+ /* ignore */
52
+ }
53
+ return "dark";
54
+ }
55
+
56
+ /** Ensure html[data-theme] is set (safe if head boot already ran). */
57
+ export function initTheme() {
58
+ const current = document.documentElement.getAttribute("data-theme");
59
+ if (current !== "light" && current !== "dark") {
60
+ setTheme(resolveInitialTheme());
61
+ }
62
+ return getTheme();
63
+ }