@corenel/web-ui 0.13.2 → 0.14.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.
Files changed (193) hide show
  1. package/dist/Composer.d.ts +30 -1
  2. package/dist/Composer.d.ts.map +1 -1
  3. package/dist/Composer.js +111 -19
  4. package/dist/Composer.js.map +1 -1
  5. package/dist/ContextBar.d.ts +9 -3
  6. package/dist/ContextBar.d.ts.map +1 -1
  7. package/dist/ContextBar.js +14 -7
  8. package/dist/ContextBar.js.map +1 -1
  9. package/dist/ContextManager.d.ts +10 -2
  10. package/dist/ContextManager.d.ts.map +1 -1
  11. package/dist/ContextManager.js +14 -10
  12. package/dist/ContextManager.js.map +1 -1
  13. package/dist/DictateButton.d.ts +21 -1
  14. package/dist/DictateButton.d.ts.map +1 -1
  15. package/dist/DictateButton.js +73 -10
  16. package/dist/DictateButton.js.map +1 -1
  17. package/dist/PickChips.d.ts +6 -0
  18. package/dist/PickChips.d.ts.map +1 -0
  19. package/dist/PickChips.js +55 -0
  20. package/dist/PickChips.js.map +1 -0
  21. package/dist/ProcessDock.d.ts +10 -0
  22. package/dist/ProcessDock.d.ts.map +1 -1
  23. package/dist/ProcessDock.js +24 -1
  24. package/dist/ProcessDock.js.map +1 -1
  25. package/dist/RichContent.d.ts.map +1 -1
  26. package/dist/RichContent.js +102 -24
  27. package/dist/RichContent.js.map +1 -1
  28. package/dist/SummaryTranscript.d.ts +5 -1
  29. package/dist/SummaryTranscript.d.ts.map +1 -1
  30. package/dist/SummaryTranscript.js +5 -3
  31. package/dist/SummaryTranscript.js.map +1 -1
  32. package/dist/TodoBar.d.ts +2 -0
  33. package/dist/TodoBar.d.ts.map +1 -1
  34. package/dist/TodoBar.js +8 -0
  35. package/dist/TodoBar.js.map +1 -1
  36. package/dist/TodoLine.d.ts +11 -0
  37. package/dist/TodoLine.d.ts.map +1 -0
  38. package/dist/TodoLine.js +55 -0
  39. package/dist/TodoLine.js.map +1 -0
  40. package/dist/ToolFold.js +1 -1
  41. package/dist/ToolFold.js.map +1 -1
  42. package/dist/Transcript.d.ts +19 -1
  43. package/dist/Transcript.d.ts.map +1 -1
  44. package/dist/Transcript.js +127 -58
  45. package/dist/Transcript.js.map +1 -1
  46. package/dist/agentChat/AgentChat.d.ts +42 -0
  47. package/dist/agentChat/AgentChat.d.ts.map +1 -1
  48. package/dist/agentChat/AgentChat.js +573 -100
  49. package/dist/agentChat/AgentChat.js.map +1 -1
  50. package/dist/agentChat/ChatSettingsSheet.d.ts +9 -0
  51. package/dist/agentChat/ChatSettingsSheet.d.ts.map +1 -0
  52. package/dist/agentChat/ChatSettingsSheet.js +103 -0
  53. package/dist/agentChat/ChatSettingsSheet.js.map +1 -0
  54. package/dist/agentChat/OptionsDrawer.d.ts +8 -0
  55. package/dist/agentChat/OptionsDrawer.d.ts.map +1 -1
  56. package/dist/agentChat/OptionsDrawer.js +24 -215
  57. package/dist/agentChat/OptionsDrawer.js.map +1 -1
  58. package/dist/agentChat/PlanReview.d.ts +1 -1
  59. package/dist/agentChat/PlanReview.d.ts.map +1 -1
  60. package/dist/agentChat/PlanReview.js +1 -1
  61. package/dist/agentChat/PlanReview.js.map +1 -1
  62. package/dist/agentChat/SourceGroups.d.ts +24 -0
  63. package/dist/agentChat/SourceGroups.d.ts.map +1 -0
  64. package/dist/agentChat/SourceGroups.js +117 -0
  65. package/dist/agentChat/SourceGroups.js.map +1 -0
  66. package/dist/agentChat/controller.d.ts +30 -1
  67. package/dist/agentChat/controller.d.ts.map +1 -1
  68. package/dist/agentChat/controller.js.map +1 -1
  69. package/dist/agentChat/pendingQueue.d.ts +4 -0
  70. package/dist/agentChat/pendingQueue.d.ts.map +1 -1
  71. package/dist/agentChat/pendingQueue.js +7 -0
  72. package/dist/agentChat/pendingQueue.js.map +1 -1
  73. package/dist/agentChat/planTool.d.ts +4 -0
  74. package/dist/agentChat/planTool.d.ts.map +1 -0
  75. package/dist/agentChat/planTool.js +4 -0
  76. package/dist/agentChat/planTool.js.map +1 -0
  77. package/dist/agentChat/testSheetHost.d.ts +3 -0
  78. package/dist/agentChat/testSheetHost.d.ts.map +1 -0
  79. package/dist/agentChat/testSheetHost.js +9 -0
  80. package/dist/agentChat/testSheetHost.js.map +1 -0
  81. package/dist/agentChat/useChatOptions.d.ts +63 -0
  82. package/dist/agentChat/useChatOptions.d.ts.map +1 -0
  83. package/dist/agentChat/useChatOptions.js +156 -0
  84. package/dist/agentChat/useChatOptions.js.map +1 -0
  85. package/dist/chatRefreshContext.d.ts +8 -0
  86. package/dist/chatRefreshContext.d.ts.map +1 -0
  87. package/dist/chatRefreshContext.js +14 -0
  88. package/dist/chatRefreshContext.js.map +1 -0
  89. package/dist/chatSkinContext.d.ts +13 -6
  90. package/dist/chatSkinContext.d.ts.map +1 -1
  91. package/dist/chatSkinContext.js +18 -4
  92. package/dist/chatSkinContext.js.map +1 -1
  93. package/dist/chatSkinCss.d.ts.map +1 -1
  94. package/dist/chatSkinCss.js +108 -22
  95. package/dist/chatSkinCss.js.map +1 -1
  96. package/dist/composerAction.d.ts +16 -0
  97. package/dist/composerAction.d.ts.map +1 -0
  98. package/dist/composerAction.js +20 -0
  99. package/dist/composerAction.js.map +1 -0
  100. package/dist/composerHistory.d.ts.map +1 -1
  101. package/dist/composerHistory.js +4 -1
  102. package/dist/composerHistory.js.map +1 -1
  103. package/dist/fx/LiveAnswer.d.ts.map +1 -1
  104. package/dist/fx/LiveAnswer.js +324 -59
  105. package/dist/fx/LiveAnswer.js.map +1 -1
  106. package/dist/fx/arrivalModes.d.ts +17 -2
  107. package/dist/fx/arrivalModes.d.ts.map +1 -1
  108. package/dist/fx/arrivalModes.js +46 -4
  109. package/dist/fx/arrivalModes.js.map +1 -1
  110. package/dist/fx/pacer.d.ts +41 -0
  111. package/dist/fx/pacer.d.ts.map +1 -0
  112. package/dist/fx/pacer.js +66 -0
  113. package/dist/fx/pacer.js.map +1 -0
  114. package/dist/fx/useReveal.d.ts +16 -1
  115. package/dist/fx/useReveal.d.ts.map +1 -1
  116. package/dist/fx/useReveal.js +101 -41
  117. package/dist/fx/useReveal.js.map +1 -1
  118. package/dist/localAddress.d.ts +2 -0
  119. package/dist/localAddress.d.ts.map +1 -0
  120. package/dist/localAddress.js +56 -0
  121. package/dist/localAddress.js.map +1 -0
  122. package/dist/steps/AfterReply.d.ts +67 -0
  123. package/dist/steps/AfterReply.d.ts.map +1 -0
  124. package/dist/steps/AfterReply.js +217 -0
  125. package/dist/steps/AfterReply.js.map +1 -0
  126. package/dist/steps/ChatApproval.d.ts +18 -0
  127. package/dist/steps/ChatApproval.d.ts.map +1 -0
  128. package/dist/steps/ChatApproval.js +35 -0
  129. package/dist/steps/ChatApproval.js.map +1 -0
  130. package/dist/steps/Delegation.d.ts +77 -0
  131. package/dist/steps/Delegation.d.ts.map +1 -0
  132. package/dist/steps/Delegation.js +188 -0
  133. package/dist/steps/Delegation.js.map +1 -0
  134. package/dist/steps/LiveRail.d.ts +14 -0
  135. package/dist/steps/LiveRail.d.ts.map +1 -0
  136. package/dist/steps/LiveRail.js +16 -0
  137. package/dist/steps/LiveRail.js.map +1 -0
  138. package/dist/steps/StepDetail.d.ts +23 -0
  139. package/dist/steps/StepDetail.d.ts.map +1 -0
  140. package/dist/steps/StepDetail.js +195 -0
  141. package/dist/steps/StepDetail.js.map +1 -0
  142. package/dist/steps/StepDetailHost.d.ts +54 -0
  143. package/dist/steps/StepDetailHost.d.ts.map +1 -0
  144. package/dist/steps/StepDetailHost.js +175 -0
  145. package/dist/steps/StepDetailHost.js.map +1 -0
  146. package/dist/steps/StepRail.d.ts +38 -0
  147. package/dist/steps/StepRail.d.ts.map +1 -0
  148. package/dist/steps/StepRail.js +238 -0
  149. package/dist/steps/StepRail.js.map +1 -0
  150. package/dist/steps/approval.d.ts +73 -0
  151. package/dist/steps/approval.d.ts.map +1 -0
  152. package/dist/steps/approval.js +81 -0
  153. package/dist/steps/approval.js.map +1 -0
  154. package/dist/steps/model.d.ts +140 -0
  155. package/dist/steps/model.d.ts.map +1 -0
  156. package/dist/steps/model.js +433 -0
  157. package/dist/steps/model.js.map +1 -0
  158. package/dist/steps/outcome.d.ts +5 -0
  159. package/dist/steps/outcome.d.ts.map +1 -0
  160. package/dist/steps/outcome.js +34 -0
  161. package/dist/steps/outcome.js.map +1 -0
  162. package/dist/steps/peek.d.ts +35 -0
  163. package/dist/steps/peek.d.ts.map +1 -0
  164. package/dist/steps/peek.js +219 -0
  165. package/dist/steps/peek.js.map +1 -0
  166. package/dist/steps/plan.d.ts +50 -0
  167. package/dist/steps/plan.d.ts.map +1 -0
  168. package/dist/steps/plan.js +242 -0
  169. package/dist/steps/plan.js.map +1 -0
  170. package/dist/steps/useRailDetail.d.ts +25 -0
  171. package/dist/steps/useRailDetail.d.ts.map +1 -0
  172. package/dist/steps/useRailDetail.js +108 -0
  173. package/dist/steps/useRailDetail.js.map +1 -0
  174. package/dist/steps/words.d.ts +40 -0
  175. package/dist/steps/words.d.ts.map +1 -0
  176. package/dist/steps/words.js +247 -0
  177. package/dist/steps/words.js.map +1 -0
  178. package/dist/toolRender.d.ts +27 -1
  179. package/dist/toolRender.d.ts.map +1 -1
  180. package/dist/toolRender.js +72 -4
  181. package/dist/toolRender.js.map +1 -1
  182. package/dist/transcriptSkin.d.ts.map +1 -1
  183. package/dist/transcriptSkin.js +66 -0
  184. package/dist/transcriptSkin.js.map +1 -1
  185. package/dist/transcriptSkinCss.d.ts +35 -0
  186. package/dist/transcriptSkinCss.d.ts.map +1 -1
  187. package/dist/transcriptSkinCss.js +360 -19
  188. package/dist/transcriptSkinCss.js.map +1 -1
  189. package/dist/useHoldPress.d.ts +24 -0
  190. package/dist/useHoldPress.d.ts.map +1 -0
  191. package/dist/useHoldPress.js +85 -0
  192. package/dist/useHoldPress.js.map +1 -0
  193. package/package.json +5 -5
@@ -1,4 +1,78 @@
1
1
  const T = (skin) => `[data-tx-skin="${skin}"]`;
2
+ /** The parts the step rail ships (packages/web-ui/steps), one selector each.
3
+ * Skins restyle the rail through these. */
4
+ export const TX_HOOKS = {
5
+ rail: '[data-tx-part="rail"]',
6
+ step: '[data-tx-part="step"]',
7
+ stepDot: '[data-tx-part="step-dot"]',
8
+ stepVerb: '[data-tx-part="step-verb"]',
9
+ stepObject: '[data-tx-part="step-object"]',
10
+ stepMeta: '[data-tx-part="step-meta"]',
11
+ fold: '[data-tx-part="explored"]',
12
+ peek: '[data-tx-part="step-peek"]',
13
+ peekLine: '[data-tx-part="peek-line"]',
14
+ task: '[data-tx-part="task"]',
15
+ taskMarker: '[data-tx-part="task-marker"]',
16
+ delegation: '[data-tx-part="delegation"]',
17
+ delegationBar: '[data-tx-part="delegation-bar"]',
18
+ subagent: '[data-tx-part="subagent"]',
19
+ approval: '[data-tx-part="approval"]',
20
+ afterReply: '[data-tx-part="after"]',
21
+ custom: '[data-tx-part="custom"]',
22
+ };
23
+ /** A step's KitStatus (running, done, failed, stopped, needs-you). */
24
+ export const STATUS_ATTR = 'data-tx-status';
25
+ /** A task heading's state (done, current, waiting, blocked, earlier). */
26
+ export const TASK_STATE_ATTR = 'data-tx-task-state';
27
+ /** How a finished step or delegation went (refused, problems, unknown). */
28
+ export const OUTCOME_ATTR = 'data-tx-outcome';
29
+ /** Skins whose status colours are too close to tell apart, so needs-you,
30
+ * running and failed each carry a mark beside the words. */
31
+ export const MARK_SKINS = ['crt', 'handheld', 'receipt'];
32
+ const STEP_LINE = '[data-tx-part="step-line"]';
33
+ /* A status mark sits on the status element's own line, reached only through
34
+ * child combinators: a descendant selector would copy an Explored group's or a
35
+ * custom wrapper's status onto every step nested inside it. */
36
+ const verbMark = (skin, status) => [TX_HOOKS.step, TX_HOOKS.fold]
37
+ .map((part) => `${T(skin)} ${part}[${STATUS_ATTR}="${status}"] > ${STEP_LINE} > ${TX_HOOKS.stepVerb}::before`)
38
+ .join(', ');
39
+ /* No step is ever needs-you: that status is on the approval wrapper and on a
40
+ * custom item (an edit waiting on review), so the mark heads those. */
41
+ const needMark = (skin) => [TX_HOOKS.approval, TX_HOOKS.custom].map((part) => `${T(skin)} ${part}[${STATUS_ATTR}="needs-you"]::before`).join(', ');
42
+ const statusMarks = (skin, m) => `
43
+ ${verbMark(skin, 'running')} { content: "${m.running} "; }
44
+ ${verbMark(skin, 'failed')} { content: "${m.failed} "; }
45
+ ${needMark(skin)} { content: "${m.needsYou}"; display: block; font-weight: 700; }
46
+ `;
47
+ /* A done step's mark, on the top-level steps and Explored lines only (the rail's
48
+ * own and a task's): the rows inside an opened Explored group carry no mark, so
49
+ * no status-keyed rule ever lands inside a group. */
50
+ const doneMark = (skin) => ['[data-tx-part="rail"]', '[data-tx-part="task-items"]']
51
+ .flatMap((parent) => [TX_HOOKS.step, TX_HOOKS.fold]
52
+ .map((part) => `${T(skin)} ${parent} > ${part}[${STATUS_ATTR}="done"] > ${STEP_LINE} > ${TX_HOOKS.stepVerb}::before`))
53
+ .join(', ');
54
+ const TASK_STATES = ['done', 'current', 'waiting', 'blocked', 'earlier'];
55
+ const TASK_HEAD = '[data-tx-part="task-head"]';
56
+ /* A task marker in one state. The state attributes are repeated here, so the
57
+ * rule outweighs rail.css's own state rule (0,4,0) on specificity, not on the
58
+ * order the two stylesheets happen to load in. */
59
+ const taskMarker = (skin, state) => `${T(skin)} ${TX_HOOKS.task}[${TASK_STATE_ATTR}="${state}"] > ${TASK_HEAD} > ${TX_HOOKS.taskMarker}`;
60
+ const TASK_COLOUR = {
61
+ done: 'var(--kit-ok)', current: 'var(--kit-run)', waiting: 'var(--kit-off)', blocked: 'var(--kit-bad)', earlier: 'var(--kit-off)',
62
+ };
63
+ /* Bracketed text in place of the drawn square, in the heading's own line and
64
+ * in the state's kit colour (or the skin's own, where a kit colour is too
65
+ * faint for text on its surface). An earlier turn's task reads like a waiting
66
+ * one. */
67
+ const textTaskMarkers = (skin, m, colour = TASK_COLOUR) => `
68
+ ${T(skin)} ${TX_HOOKS.taskMarker} { position: static; flex: none; transform: none; width: auto; height: auto; border: 0; border-radius: 0; background: transparent; }
69
+ ${TASK_STATES.map((s) => `${taskMarker(skin, s)} { background: transparent; color: ${colour[s]}; }
70
+ ${taskMarker(skin, s)}::before { content: "${m[s]}"; }`).join('\n')}
71
+ `;
72
+ /* A drawn task square that is not done sits on the skin's own surface, so the
73
+ * rail line never shows through it (rail.css paints it --surface-canvas, an
74
+ * app colour). An earlier turn's task reads like a waiting one. */
75
+ const boxTaskMarkers = (skin) => `${TASK_STATES.filter((s) => s !== 'done').map((s) => taskMarker(skin, s)).join(', ')} { background: var(--surface-1); }`;
2
76
  const terminal = `
3
77
  ${T('terminal')} [data-tx-part="user"]::before { content: "you ~ % "; color: #5fb3f9; }
4
78
  ${T('terminal')} [data-tx-part="assistant"] { padding-left: 2ch; border-left: 1px solid #26303b; }
@@ -39,7 +113,7 @@ ${T('paper')} [data-tx-status="error"] { --tx-glyph-fg: #a8412f; }
39
113
  ${T('paper')} [data-tx-status="error"] [data-tx-part="tool-name"] { color: #a8412f; }
40
114
  `;
41
115
  const blueprint = `
42
- ${T('blueprint')} [data-tx-part="user"]::before { content: "REQ "; color: #7fc4ff; font-size: 11px; letter-spacing: 0.1em; }
116
+ ${T('blueprint')} [data-tx-part="user"]::before { content: "REQ "; color: #7fc4ff; font-size: 12px; letter-spacing: 0.1em; }
43
117
  ${T('blueprint')} [data-tx-part="tool"] { position: relative; margin-left: 18px; }
44
118
  ${T('blueprint')} [data-tx-part="tool"]::before { content: ""; position: absolute; left: -13px; top: 13px; width: 12px; border-top: 1px solid #7fc4ff; }
45
119
  ${T('blueprint')} [data-tx-part="tool"]::after { content: ""; position: absolute; left: -13px; top: -8px; bottom: -8px; border-left: 1px solid #7fc4ff; }
@@ -94,31 +168,295 @@ ${T('receipt')} [data-tx-status="error"] [data-tx-part="tool-name"] { text-decor
94
168
  * wall clock. */
95
169
  const mission = `
96
170
  ${T('mission')} [data-tx-part="list"]::before { content: "\\25CF LIVE MISSION LOG"; display: block; padding-bottom: 6px; border-bottom: 1px solid #22313f;
97
- color: #3ddc84; font-size: 10.5px; letter-spacing: 0.14em; }
98
- ${T('mission')} [data-tx-part="turn"][data-tx-elapsed]::before { content: attr(data-tx-elapsed); color: #5d7488; font-size: 10.5px; letter-spacing: 0.08em; }
99
- ${T('mission')} [data-tx-part="user"]::before { content: "FLIGHT "; color: #ffb454; font-size: 10.5px; letter-spacing: 0.1em; }
100
- ${T('mission')} [data-tx-part="assistant"]::before { content: "CAPCOM "; float: left; margin-right: 1ch; color: #6cc4ff; font-size: 10.5px; letter-spacing: 0.1em; }
171
+ color: #3ddc84; font-size: 12px; letter-spacing: 0.14em; }
172
+ ${T('mission')} [data-tx-part="turn"][data-tx-elapsed]::before { content: attr(data-tx-elapsed); color: #5d7488; font-size: 12px; letter-spacing: 0.08em; }
173
+ ${T('mission')} [data-tx-part="user"]::before { content: "FLIGHT "; color: #ffb454; font-size: 12px; letter-spacing: 0.1em; }
174
+ ${T('mission')} [data-tx-part="assistant"]::before { content: "CAPCOM "; float: left; margin-right: 1ch; color: #6cc4ff; font-size: 12px; letter-spacing: 0.1em; }
101
175
  ${T('mission')} [data-tx-part="tool-name"]::before { content: "GO"; display: inline-block; margin-right: 8px; padding: 0 6px; border: 1px solid #3ddc84;
102
- border-radius: 3px; color: #3ddc84; font-size: 9.5px; letter-spacing: 0.1em; line-height: 1.6; }
103
- ${T('mission')} [data-tx-status="running"] [data-tx-part="tool-name"]::before { content: "HOLD"; border-color: #ffb454; color: #ffb454; }
176
+ border-radius: 3px; color: #3ddc84; font-size: 12px; letter-spacing: 0.1em; line-height: 1.6; }
177
+ ${T('mission')} [data-tx-status="running"] [data-tx-part="tool-name"]::before { content: "LIVE"; border-color: var(--kit-run); color: var(--kit-run); }
104
178
  ${T('mission')} [data-tx-status="error"] [data-tx-part="tool-name"]::before { content: "NO-GO"; border-color: #ff5d5d; color: #ff5d5d; }
105
179
  ${T('mission')} [data-tx-part="stats"] { align-self: flex-start; padding: 4px 8px; border: 1px solid #22313f; background: #0f1821; }
106
180
  ${T('mission')} [data-tx-part="stats"]::before { content: "TELEMETRY "; color: #5d7488; }
107
181
  `;
182
+ /** Retro's step-detail status pill, on the window's white rather than a tint of
183
+ * the teal desktop (M6). One rule for both roots: the transcript's own panel
184
+ * (here, under data-tx-skin) and the chat's side panel (chatSkinCss.ts, under
185
+ * data-chat-skin), so the two pills cannot drift apart. */
186
+ export const RETRO_PILL = `[data-tx-part="detail-pill"][${STATUS_ATTR}] { border-radius: 0; background: var(--surface-1); box-shadow: inset 0 0 0 1px #808080; }`;
108
187
  const BEVEL = 'inset -1px -1px #0a0a0a, inset 1px 1px #fff, inset -2px -2px #808080, inset 2px 2px #dfdfdf';
109
188
  const SUNKEN = 'inset 1px 1px #808080, inset -1px -1px #fff, inset 2px 2px #0a0a0a, inset -2px -2px #dfdfdf';
110
189
  const retro = `
111
190
  ${T('retro')} [data-tx-part="list"] { counter-reset: tx-win; }
112
191
  ${T('retro')} [data-tx-part="turn"] { counter-increment: tx-win; padding: 3px 3px 8px; background: #c0c0c0; box-shadow: ${BEVEL}; }
113
192
  ${T('retro')} [data-tx-part="turn"]::before { content: "Transcript - turn " counter(tx-win); display: block; padding: 3px 6px;
114
- background: linear-gradient(90deg, #000080, #1084d0); color: #fff; font-weight: 700; font-size: 11.5px; }
193
+ background: linear-gradient(90deg, #000080, #1084d0); color: #fff; font-weight: 700; font-size: 12px; }
115
194
  ${T('retro')} [data-tx-part="turn"] > [data-tx-part] { margin-left: 6px; margin-right: 6px; }
116
195
  ${T('retro')} [data-tx-part="user"] { box-shadow: ${SUNKEN}; }
117
196
  ${T('retro')} [data-tx-part="assistant"] { padding: 6px 8px; background: #fff; box-shadow: ${SUNKEN}; }
118
197
  ${T('retro')} [data-tx-part="stats"] { padding: 2px 6px; box-shadow: inset 1px 1px #808080, inset -1px -1px #fff; }
119
198
  ${T('retro')} [data-tx-status="error"] { padding: 3px; box-shadow: ${BEVEL}; }
120
199
  ${T('retro')} [data-tx-status="error"]::before { content: "Error"; display: block; padding: 2px 6px;
121
- background: linear-gradient(90deg, #800000, #c04040); color: #fff; font-weight: 700; font-size: 11.5px; }
200
+ background: linear-gradient(90deg, #800000, #c04040); color: #fff; font-weight: 700; font-size: 12px; }
201
+ `;
202
+ /* ---- the step rail (packages/web-ui/steps), per skin. Rail colours and shapes
203
+ * that are plain values live in the token maps (--rail-line, --peek-bg, ...);
204
+ * these rules add marks, case and spacing. The approval card's rules are in
205
+ * chatSkinCss.ts, which reaches it in all three places it renders. ---- */
206
+ const SUBAGENT_NAME = '[data-tx-part="subagent-name"]';
207
+ /* A shell log: lowercase verbs, a command reads as a prompt line, peeks are
208
+ * bare output indented under it, tasks a checklist, sub-agents numbered jobs. */
209
+ const terminalRail = `
210
+ ${T('terminal')} ${TX_HOOKS.rail}::before { width: 1px; }
211
+ ${T('terminal')} ${TX_HOOKS.stepVerb} { text-transform: lowercase; }
212
+ ${T('terminal')} ${TX_HOOKS.step}[data-tx-kind="run"] > ${STEP_LINE} > ${TX_HOOKS.stepVerb}::before { content: "$ "; color: var(--text-tertiary); }
213
+ ${T('terminal')} ${TX_HOOKS.peek} { margin-left: 4ch; }
214
+ ${T('terminal')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { color: var(--kit-bad); }
215
+ ${textTaskMarkers('terminal', { done: '[x]', current: '[>]', waiting: '[ ]', blocked: '[!]', earlier: '[ ]' })}
216
+ ${T('terminal')} [data-tx-part="subagent-list"] { counter-reset: tx-job; }
217
+ ${T('terminal')} ${TX_HOOKS.subagent} { counter-increment: tx-job; }
218
+ ${T('terminal')} ${TX_HOOKS.subagent}::before { content: "[" counter(tx-job) "]"; flex: none; color: var(--text-tertiary); }
219
+ ${T('terminal')} ${TX_HOOKS.afterReply}::before { content: "-- "; }
220
+ `;
221
+ /* Phosphor: a glowing 1px rail, uppercase verbs, a mark beside every status
222
+ * (Task 7's > X ? plus * for done). The running mark pulses between full and
223
+ * 0.45 opacity, never off; the needs-you mark is inverse. A failed peek line
224
+ * glows red. The cursor after the last answer is placed absolutely on the
225
+ * rail, so it no longer opens a line of its own below the answer (a strip
226
+ * outside the answer that taps fell through); the last answer keeps a column
227
+ * as wide as the cursor and its 4px gap, so no glyph runs under it. */
228
+ const crtRail = `
229
+ ${T('crt')} ${TX_HOOKS.rail}::before { width: 1px; box-shadow: 0 0 6px rgba(255,170,60,0.6); }
230
+ ${T('crt')} ${TX_HOOKS.stepVerb} { text-transform: uppercase; }
231
+ ${doneMark('crt')} { content: "* "; }
232
+ ${verbMark('crt', 'running')} { animation: tx-crt-mark 1.1s steps(1) infinite; }
233
+ @keyframes tx-crt-mark { 50% { opacity: 0.45; } }
234
+ ${needMark('crt')} { width: fit-content; padding: 0 4px; background: var(--kit-need); color: var(--tx-bg); text-shadow: none; }
235
+ ${T('crt')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { text-shadow: 0 0 6px rgba(255,90,40,0.7); }
236
+ ${textTaskMarkers('crt', { done: '[*]', current: '[>]', waiting: '[ ]', blocked: '[X]', earlier: '[ ]' })}
237
+ ${T('crt')} ${TX_HOOKS.subagent} { text-transform: uppercase; }
238
+ ${T('crt')} [data-tx-part="delegation-title"] { text-transform: uppercase; }
239
+ ${T('crt')} ${TX_HOOKS.delegation} > ${TX_HOOKS.stepDot}[${STATUS_ATTR}="running"], ${T('crt')} [data-tx-part="subagent-dot"][${STATUS_ATTR}="running"] { filter: drop-shadow(0 0 4px var(--kit-run)); }
240
+ ${T('crt')} ${TX_HOOKS.afterReply} { text-transform: uppercase; }
241
+ ${T('crt')} .tx-rail-body [data-tx-last] { position: relative; }
242
+ ${T('crt')} .tx-rail-body [data-tx-part="turn"]:last-child [data-tx-last] { padding-right: calc(0.6em + 4px); }
243
+ ${T('crt')} .tx-rail-body [data-tx-part="turn"]:last-child [data-tx-last]::after { position: absolute; right: 0; bottom: 0; margin: 0; pointer-events: none; }
244
+ @media (prefers-reduced-motion: reduce) {
245
+ ${verbMark('crt', 'running')} { animation: none; }
246
+ }
247
+ `;
248
+ /* Quiet: a hairline rail, lighter verbs, bare peeks with no line numbers, a
249
+ * small square marker that stays empty (the line's own ground, never the
250
+ * app's canvas colour) until its task is done, plain rows and
251
+ * an after-reply line in the dim tertiary colour (Details included, at full
252
+ * opacity: 4.84:1 on the skin's background). */
253
+ const minimalRail = `
254
+ ${T('minimal')} ${TX_HOOKS.rail}::before { width: 1px; }
255
+ ${T('minimal')} ${TX_HOOKS.stepVerb} { font-weight: 500; color: var(--text-secondary); }
256
+ ${T('minimal')} ${TX_HOOKS.peekLine} > [data-tx-part="peek-num"] { display: none; }
257
+ ${T('minimal')} ${TX_HOOKS.taskMarker} { border-width: 1px; border-radius: 1px; }
258
+ ${TASK_STATES.filter((s) => s !== 'done').map((s) => taskMarker('minimal', s)).join(', ')} { background: var(--tx-bg); }
259
+ ${T('minimal')} ${TX_HOOKS.subagent} > ${SUBAGENT_NAME} { font-weight: 500; }
260
+ ${T('minimal')} ${TX_HOOKS.afterReply} { color: var(--text-tertiary); }
261
+ `;
262
+ /* A channel log: no rail line, every step an action line ("* agent ran ...",
263
+ * "* agent is running ...", "* agent failed: ...", "* agent is waiting on
264
+ * you"), peeks quoted with "| ", tasks and the after-reply line as server
265
+ * notices (an unfinished task's square left empty on the log's ground),
266
+ * sub-agents as their own nicks. On the rail an answer's lists form
267
+ * their own block, so they sit beside the floated <agent> label instead of
268
+ * under it (the label used to cover a numbered list's "1."). The speaker
269
+ * words make a verb long ("* agent failed: explored"), so the verb stays whole
270
+ * (it carries the status words) and the line's meta, which only repeats what
271
+ * went wrong, shrinks to its ellipsis: meta and chevron stay on a 390px line. */
272
+ const ircRail = `
273
+ ${T('irc')} ${TX_HOOKS.rail}::before { content: none; }
274
+ ${T('irc')} ${TX_HOOKS.stepVerb}, ${T('irc')} [data-tx-part="explored-list"] ${TX_HOOKS.stepVerb} { text-transform: lowercase; font-weight: 400; font-style: italic; color: #d2a8ff; }
275
+ ${T('irc')} ${TX_HOOKS.stepVerb}::before { content: "* ${N} "; }
276
+ ${T('irc')} ${STEP_LINE} > ${TX_HOOKS.stepMeta} { flex: 0 1 auto; min-width: 0; }
277
+ ${verbMark('irc', 'running')} { content: "* ${N} is "; }
278
+ ${verbMark('irc', 'failed')} { content: "* ${N} failed: "; color: var(--kit-bad); }
279
+ ${needMark('irc')} { content: "* ${N} is waiting on you"; display: block; color: var(--kit-need); font-style: italic; }
280
+ ${T('irc')} ${TX_HOOKS.peek} { margin-left: 4ch; }
281
+ ${T('irc')} ${TX_HOOKS.peekLine}::before { content: "| "; color: var(--text-tertiary); }
282
+ ${T('irc')} ${TX_HOOKS.taskMarker} { border-radius: 0; }
283
+ ${TASK_STATES.filter((s) => s !== 'done').map((s) => taskMarker('irc', s)).join(', ')} { background: transparent; }
284
+ ${T('irc')} [data-tx-part="task-title"]::before { content: "-!- task: "; color: #3fb950; font-weight: 400; }
285
+ ${T('irc')} ${TX_HOOKS.subagent} > ${SUBAGENT_NAME}::before { content: "* "; color: var(--text-tertiary); }
286
+ ${T('irc')} ${TX_HOOKS.afterReply}::before { content: "-!- "; color: #3fb950; }
287
+ ${T('irc')} .tx-rail-body [data-tx-part="assistant"] .md-ol { display: flow-root; }
288
+ ${T('irc')} .tx-rail-body [data-tx-part="assistant"] .md-ul { display: flow-root; }
289
+ `;
290
+ /* A printed page: the rail a thin rule, small-capital verbs and names, peeks
291
+ * set between two rules, each task heading ruled off with a ruled square for
292
+ * its marker, and an italic after-reply line. */
293
+ const paperRail = `
294
+ ${T('paper')} ${TX_HOOKS.rail}::before { width: 1px; border-radius: 0; }
295
+ ${T('paper')} ${TX_HOOKS.stepVerb} { font-variant: small-caps; letter-spacing: 0.03em; }
296
+ ${T('paper')} ${TX_HOOKS.peek} { border-top: 1px solid var(--border-subtle); border-bottom: 1px solid var(--border-subtle); border-radius: 0; }
297
+ ${T('paper')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { font-style: italic; }
298
+ ${T('paper')} ${TASK_HEAD} { border-bottom: 1px solid var(--border-subtle); }
299
+ ${T('paper')} ${TX_HOOKS.taskMarker} { border-width: 1px; border-radius: 0; }
300
+ ${boxTaskMarkers('paper')}
301
+ ${T('paper')} ${TX_HOOKS.subagent} > ${SUBAGENT_NAME} { font-variant: small-caps; letter-spacing: 0.03em; }
302
+ ${T('paper')} [data-tx-part="delegation-title"] { font-variant: small-caps; letter-spacing: 0.03em; }
303
+ ${T('paper')} ${TX_HOOKS.afterReply} { font-style: italic; }
304
+ `;
305
+ /* A drawing: the rail is a dimension line (the old tool leader lines, moved
306
+ * onto it) with a tick at each end, verbs in tracked capitals, a dashed rule
307
+ * over each peek and a dashed outline on a failed peek line, a diamond tick
308
+ * for each task, a dashed outline on a sub-agent that finished with problems,
309
+ * and a tracked after-reply line. On the rail, on the phone, the older 11px
310
+ * REQ label is held to 12px. */
311
+ const blueprintRail = `
312
+ ${T('blueprint')} ${TX_HOOKS.rail}::before { width: 1px; border-radius: 0; }
313
+ ${T('blueprint')} ${TX_HOOKS.rail}::after { content: ""; position: absolute; left: 1px; top: 8px; bottom: 8px; width: 9px; border-top: 1px solid var(--rail-line); border-bottom: 1px solid var(--rail-line); pointer-events: none; }
314
+ ${T('blueprint')} ${TX_HOOKS.stepVerb} { text-transform: uppercase; letter-spacing: 0.08em; }
315
+ ${T('blueprint')} ${TX_HOOKS.peek} { border-top: 1px dashed var(--border-subtle); border-radius: 0; }
316
+ ${T('blueprint')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { outline: 1px dashed var(--kit-bad); outline-offset: -1px; }
317
+ ${T('blueprint')} ${TX_HOOKS.taskMarker} { border-width: 1px; border-radius: 0; transform: translateY(-50%) rotate(45deg); }
318
+ ${boxTaskMarkers('blueprint')}
319
+ ${T('blueprint')} ${TX_HOOKS.subagent} > ${SUBAGENT_NAME} { letter-spacing: 0.04em; }
320
+ ${T('blueprint')} ${TX_HOOKS.subagent}[${OUTCOME_ATTR}="problems"] { outline: 1px dashed var(--kit-need); outline-offset: -1px; }
321
+ ${T('blueprint')} [data-tx-part="delegation-title"] { text-transform: uppercase; letter-spacing: 0.08em; }
322
+ ${T('blueprint')} ${TX_HOOKS.afterReply} { letter-spacing: 0.06em; }
323
+ `;
324
+ /* A till slip: the rail a dashed line, OK beside every done step (Task 7's
325
+ * ..., VOID and SIGN beside the rest), peeks between dashed rules, tasks as
326
+ * [ ] checkboxes, sub-agents as line items, and the after-reply line printed
327
+ * as the TOTAL under a dashed rule. The waiting and earlier boxes print in the
328
+ * secondary ink: the kit's grey is too faint for text on the slip. */
329
+ const receiptRail = `
330
+ ${T('receipt')} ${TX_HOOKS.rail}::before { width: 0; border-radius: 0; background: none; border-left: 1px dashed var(--rail-line); }
331
+ ${doneMark('receipt')} { content: "OK "; }
332
+ ${T('receipt')} ${TX_HOOKS.peek} { border-top: 1px dashed var(--rail-line); border-bottom: 1px dashed var(--rail-line); border-radius: 0; }
333
+ ${T('receipt')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { font-weight: 700; }
334
+ ${textTaskMarkers('receipt', { done: '[x]', current: '[>]', waiting: '[ ]', blocked: '[!]', earlier: '[ ]' }, { ...TASK_COLOUR, waiting: 'var(--text-secondary)', earlier: 'var(--text-secondary)' })}
335
+ ${T('receipt')} ${TX_HOOKS.subagent} { border-bottom: 1px dotted var(--border-default); }
336
+ ${T('receipt')} ${TX_HOOKS.subagent} > ${SUBAGENT_NAME} { text-transform: uppercase; }
337
+ ${T('receipt')} ${TX_HOOKS.afterReply} { font-weight: 700; border-top: 1px dashed var(--rail-line); }
338
+ ${T('receipt')} ${TX_HOOKS.afterReply}::before { content: "TOTAL "; }
339
+ `;
340
+ /* A desktop window: the rail is a sunken white field with a groove for its
341
+ * line, a failed step is the Error dialog the old tool rows use (its dot moved
342
+ * down past the 20px bar, onto its own line), peeks are sunken white boxes,
343
+ * task headings raised bars, sub-agents list-view rows, and the after-reply
344
+ * line a status bar. The status pill and the add/del peek lines sit on the
345
+ * window's white, not on a tint of the teal desktop (M6). */
346
+ const retroRail = `
347
+ ${T('retro')} ${TX_HOOKS.rail} { padding-top: 4px; padding-right: 4px; padding-bottom: 4px; background: var(--surface-1); box-shadow: ${SUNKEN}; }
348
+ ${T('retro')} ${TX_HOOKS.rail}::before { width: 1px; border-radius: 0; box-shadow: 1px 0 #dfdfdf; }
349
+ ${T('retro')} ${TX_HOOKS.step}[${STATUS_ATTR}="failed"] { padding: 3px; background: var(--surface-2); box-shadow: ${BEVEL}; }
350
+ ${T('retro')} ${TX_HOOKS.step}[${STATUS_ATTR}="failed"]::before { content: "Error"; display: block; height: 20px; box-sizing: border-box; padding: 2px 6px;
351
+ background: linear-gradient(90deg, #800000, #c04040); color: #ffffff; font-weight: 700; font-size: 12px; line-height: 16px; }
352
+ ${T('retro')} ${TX_HOOKS.step}[${STATUS_ATTR}="failed"] > ${TX_HOOKS.stepDot} { margin-top: 23px; }
353
+ ${T('retro')} ${TX_HOOKS.step}[${STATUS_ATTR}="failed"] > ${STEP_LINE} > ${TX_HOOKS.stepVerb} { color: var(--kit-bad); }
354
+ ${T('retro')} ${TX_HOOKS.peek} { border-radius: 0; box-shadow: ${SUNKEN}; }
355
+ ${T('retro')} ${TX_HOOKS.peek}[data-tx-tone="bad"] { box-shadow: inset 2px 0 0 var(--kit-bad), ${SUNKEN}; }
356
+ ${T('retro')} ${TX_HOOKS.peekLine}[data-tx-tone="add"], ${T('retro')} ${TX_HOOKS.peekLine}[data-tx-tone="del"] { background: transparent; }
357
+ ${T('retro')} .tx-after-change[data-tx-tone="bad"] { background: transparent; }
358
+ ${T('retro')} ${TASK_HEAD} { background: var(--surface-2); box-shadow: ${BEVEL}; }
359
+ ${T('retro')} ${TX_HOOKS.taskMarker} { border-radius: 0; }
360
+ ${boxTaskMarkers('retro')}
361
+ ${T('retro')} ${TX_HOOKS.subagent} { border-bottom: 1px solid #dfdfdf; }
362
+ ${T('retro')} ${TX_HOOKS.afterReply} { background: var(--surface-2); box-shadow: inset 1px 1px #808080, inset -1px -1px #ffffff; }
363
+ ${T('retro')} ${TX_HOOKS.afterReply}[data-tx-selected] { box-shadow: inset 0 0 0 1px #000000; }
364
+ ${T('retro')} ${RETRO_PILL}
365
+ `;
366
+ const SUBAGENT_DOT = '[data-tx-part="subagent-dot"]';
367
+ /* A sub-agent row's mark, read from its own dot (the row's status is the
368
+ * callee's; the dot says needs-you while its approval shows). The dot is
369
+ * aria-hidden, so the mark is too; the row's label carries the words. */
370
+ const rowMark = (skin, status) => `${T(skin)} ${SUBAGENT_DOT}[${STATUS_ATTR}="${status}"]::after`;
371
+ /* A mark on the delegation's own rail dot (Delegation.tsx OwnDot, aria-hidden),
372
+ * reached by a child combinator only, so no dot on a rail nested inside the
373
+ * delegation's detail ever takes it. */
374
+ const DELEGATION_DOT = (skin, status) => `${T(skin)} ${TX_HOOKS.delegation} > ${TX_HOOKS.stepDot}[${STATUS_ATTR}="${status}"]::after`;
375
+ const ASSISTANT_LISTS = (skin) => `${T(skin)} .tx-rail-body [data-tx-part="assistant"] .md-ol, ${T(skin)} .tx-rail-body [data-tx-part="assistant"] .md-ul { display: flow-root; }`;
376
+ /* A flight console: the rail a dark rule, every status a boxed call beside the
377
+ * verb (GO done, LIVE running, NO-GO failed, HOLD on what waits on you: the
378
+ * kit's colour meanings, so running is blue and HOLD amber, on the old tool
379
+ * rows too), verbs in tracked capitals, peeks on the
380
+ * console panel, each task a CHECKLIST item with a square marker, each
381
+ * sub-agent row its own GO / NO-GO (amber when it finished with problems), and
382
+ * the after-reply line framed as TELEMETRY. The boxes are 12px, not the old
383
+ * 9.5px badge. On the rail an answer's lists sit beside the floated CAPCOM
384
+ * label instead of under it. */
385
+ const missionBox = 'display: inline-block; padding: 0 6px; border: 1px solid currentColor; border-radius: 3px; font-size: 12px; font-weight: 600; letter-spacing: 0.1em; line-height: 1.6;';
386
+ const missionRail = `
387
+ ${T('mission')} ${TX_HOOKS.rail}::before { border-radius: 0; }
388
+ ${T('mission')} ${TX_HOOKS.stepVerb} { text-transform: uppercase; letter-spacing: 0.06em; }
389
+ ${T('mission')} ${TX_HOOKS.stepVerb}::before { ${missionBox} margin-right: 8px; }
390
+ ${doneMark('mission')} { content: "GO"; color: var(--kit-ok); }
391
+ ${verbMark('mission', 'running')} { content: "LIVE"; color: var(--kit-run); }
392
+ ${verbMark('mission', 'failed')} { content: "NO-GO"; color: var(--kit-bad); }
393
+ ${needMark('mission')} { content: "HOLD"; ${missionBox} margin-bottom: 4px; color: var(--kit-need); }
394
+ ${T('mission')} ${TX_HOOKS.peek} { border: 1px solid var(--border-subtle); border-radius: 0; }
395
+ ${T('mission')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { font-weight: 600; }
396
+ ${T('mission')} ${TX_HOOKS.taskMarker} { border-radius: 0; }
397
+ ${boxTaskMarkers('mission')}
398
+ ${T('mission')} [data-tx-part="task-title"] { text-transform: uppercase; letter-spacing: 0.04em; }
399
+ ${T('mission')} [data-tx-part="task-title"]::before { content: "CHECKLIST "; white-space: pre; color: var(--text-tertiary); font-size: 12px; font-weight: 400; letter-spacing: 0.14em; }
400
+ ${T('mission')} ${TX_HOOKS.subagent} > ${SUBAGENT_NAME} { text-transform: uppercase; letter-spacing: 0.06em; }
401
+ ${T('mission')} [data-tx-part="delegation-title"] { text-transform: uppercase; letter-spacing: 0.06em; }
402
+ ${T('mission')} ${SUBAGENT_DOT} { width: auto; gap: 6px; align-items: center; }
403
+ ${T('mission')} ${SUBAGENT_DOT}::after { ${missionBox} }
404
+ ${rowMark('mission', 'done')} { content: "GO"; color: var(--kit-ok); }
405
+ ${T('mission')} ${SUBAGENT_DOT}[${STATUS_ATTR}="done"][${OUTCOME_ATTR}="problems"]::after { color: var(--kit-need); }
406
+ ${T('mission')} ${SUBAGENT_DOT}[${STATUS_ATTR}="done"][${OUTCOME_ATTR}="unknown"]::after { color: var(--text-tertiary); }
407
+ ${rowMark('mission', 'running')} { content: "LIVE"; color: var(--kit-run); }
408
+ ${rowMark('mission', 'failed')} { content: "NO-GO"; color: var(--kit-bad); }
409
+ ${rowMark('mission', 'needs-you')} { content: "HOLD"; color: var(--kit-need); }
410
+ ${T('mission')} ${TX_HOOKS.afterReply} { border-radius: 0; box-shadow: inset 0 0 0 1px var(--border-subtle); letter-spacing: 0.04em; }
411
+ ${T('mission')} ${TX_HOOKS.afterReply}[data-tx-selected] { box-shadow: inset 0 0 0 1px var(--text-tertiary); }
412
+ ${T('mission')} ${TX_HOOKS.afterReply}::before { content: "TELEMETRY "; white-space: pre; color: var(--text-disabled); }
413
+ ${ASSISTANT_LISTS('mission')}
414
+ `;
415
+ /* A four-green screen: a 2px ink rail, OK beside every done step and - beside
416
+ * a stopped one (Task 7's >, X and ! beside the rest), all in the ink colour.
417
+ * The kit's status colours here are dark enough to read on both screen greens
418
+ * (Task 11b), which leaves them too close to tell apart, so the marks carry
419
+ * every status: on steps, on sub-agent rows (OK? for one that finished with
420
+ * problems) and on the delegation's own dot. The running mark bobs, by
421
+ * movement only, so it is never fainter than the others. Peeks, sub-agent
422
+ * rows and the after-reply line are boxed in the border green; the current
423
+ * task is an arrow and a blocked one an X, and a waiting square is drawn in
424
+ * the border green (the palette's grey, #8bac0f, was 1.2:1 on the screen). A
425
+ * failed peek line is underlined, since the kit's red is the ink. */
426
+ const handheldRail = `
427
+ ${T('handheld')} ${TX_HOOKS.rail}::before { border-radius: 0; }
428
+ ${doneMark('handheld')} { content: "OK "; }
429
+ ${verbMark('handheld', 'running')} { display: inline-block; white-space: pre; animation: tx-hh-bob 1s steps(2) infinite; }
430
+ ${T('handheld')} ${TX_HOOKS.peek} { border: 2px solid var(--border-default); border-radius: 0; }
431
+ ${T('handheld')} ${TX_HOOKS.peekLine}[data-tx-tone="bad"] { text-decoration: underline wavy; }
432
+ ${T('handheld')} ${TX_HOOKS.taskMarker} { border-radius: 0; }
433
+ ${taskMarker('handheld', 'waiting')}, ${taskMarker('handheld', 'earlier')} { border-color: var(--border-default); background: var(--surface-1); }
434
+ ${taskMarker('handheld', 'current')}, ${taskMarker('handheld', 'blocked')} { width: auto; height: auto; border: 0; background: var(--surface-1); color: var(--text-primary); line-height: 1; }
435
+ ${taskMarker('handheld', 'current')}::before { content: ">"; }
436
+ ${taskMarker('handheld', 'blocked')}::before { content: "X"; }
437
+ ${T('handheld')} [data-tx-part="subagent-list"] { gap: 4px; }
438
+ ${T('handheld')} ${TX_HOOKS.subagent} { border-radius: 0; box-shadow: inset 0 0 0 2px var(--border-default); }
439
+ ${T('handheld')} ${TX_HOOKS.subagent}[data-tx-selected] { box-shadow: inset 0 0 0 2px var(--text-primary); }
440
+ ${T('handheld')} ${SUBAGENT_DOT} { width: auto; gap: 4px; align-items: center; }
441
+ ${rowMark('handheld', 'done')} { content: "OK"; }
442
+ ${rowMark('handheld', 'running')} { content: ">"; }
443
+ ${rowMark('handheld', 'failed')} { content: "X"; }
444
+ ${rowMark('handheld', 'needs-you')} { content: "!"; font-weight: 700; }
445
+ ${rowMark('handheld', 'stopped')} { content: "-"; }
446
+ ${T('handheld')} ${SUBAGENT_DOT}[${STATUS_ATTR}="done"][${OUTCOME_ATTR}="problems"]::after { content: "OK?"; }
447
+ ${verbMark('handheld', 'stopped')} { content: "- "; }
448
+ ${DELEGATION_DOT('handheld', 'done')} { content: "OK"; }
449
+ ${T('handheld')} ${TX_HOOKS.delegation} > ${TX_HOOKS.stepDot}[${STATUS_ATTR}="done"][${OUTCOME_ATTR}="problems"]::after { content: "OK?"; }
450
+ ${DELEGATION_DOT('handheld', 'running')} { content: ">"; }
451
+ ${DELEGATION_DOT('handheld', 'failed')} { content: "X"; }
452
+ ${DELEGATION_DOT('handheld', 'needs-you')} { content: "!"; font-weight: 700; }
453
+ ${DELEGATION_DOT('handheld', 'stopped')} { content: "-"; }
454
+ ${T('handheld')} ${TX_HOOKS.delegation} > ${TX_HOOKS.stepDot}::after { position: absolute; top: calc(100% + 2px); left: 50%; transform: translateX(-50%); padding: 1px 0; background: var(--tx-bg); line-height: 1; white-space: pre; }
455
+ ${T('handheld')} ${TX_HOOKS.afterReply} { border-radius: 0; box-shadow: inset 0 0 0 2px var(--border-default); }
456
+ ${T('handheld')} ${TX_HOOKS.afterReply}[data-tx-selected] { box-shadow: inset 0 0 0 2px var(--text-primary); }
457
+ @media (prefers-reduced-motion: reduce) {
458
+ ${verbMark('handheld', 'running')} { animation: none; }
459
+ }
122
460
  `;
123
461
  /* Every skin's answers take its own text size. The app's markdown rules pin
124
462
  * answer paragraphs and lists to 13.5px; measured before this rule, Handheld's
@@ -129,15 +467,18 @@ const answerSize = (skin) => ['md-p', 'md-ul', 'md-ol']
129
467
  .join('\n');
130
468
  export const SKIN_CSS = {
131
469
  default: '',
132
- terminal: terminal + answerSize('terminal'),
133
- crt: crt + answerSize('crt'),
134
- minimal: minimal + answerSize('minimal'),
135
- paper: paper + answerSize('paper'),
136
- blueprint: blueprint + answerSize('blueprint'),
137
- irc: irc + answerSize('irc'),
138
- handheld: handheld + answerSize('handheld'),
139
- receipt: receipt + answerSize('receipt'),
140
- mission: mission + answerSize('mission'),
141
- retro: retro + answerSize('retro'),
470
+ terminal: terminal + terminalRail + answerSize('terminal'),
471
+ // The marks come before crtRail, which only adds to them.
472
+ crt: crt + statusMarks('crt', { running: '>', failed: 'X', needsYou: '?' }) + crtRail + answerSize('crt'),
473
+ minimal: minimal + minimalRail + answerSize('minimal'),
474
+ paper: paper + paperRail + answerSize('paper'),
475
+ blueprint: blueprint + blueprintRail + answerSize('blueprint'),
476
+ irc: irc + ircRail + answerSize('irc'),
477
+ // The marks come before handheldRail, which only adds the done mark and the bob.
478
+ handheld: handheld + statusMarks('handheld', { running: '>', failed: 'X', needsYou: '!' }) + handheldRail + answerSize('handheld'),
479
+ // The marks come before receiptRail, which only adds the done mark.
480
+ receipt: receipt + statusMarks('receipt', { running: '...', failed: 'VOID', needsYou: 'SIGN' }) + receiptRail + answerSize('receipt'),
481
+ mission: mission + missionRail + answerSize('mission'),
482
+ retro: retro + retroRail + answerSize('retro'),
142
483
  };
143
484
  //# sourceMappingURL=transcriptSkinCss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcriptSkinCss.js","sourceRoot":"","sources":["../transcriptSkinCss.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,GAAG,CAAC,IAAoB,EAAU,EAAE,CAAC,kBAAkB,IAAI,IAAI,CAAC;AAEvE,MAAM,QAAQ,GAAG;EACf,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;CACd,CAAC;AAEF,MAAM,GAAG,GAAG;;EAEV,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC;;;EAGR,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC;;;;;IAKN,CAAC,CAAC,KAAK,CAAC;;CAEX,CAAC;AAEF,MAAM,OAAO,GAAG;EACd,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;CACb,CAAC;AAEF,MAAM,KAAK,GAAG;;EAEZ,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC;CACX,CAAC;AAEF,MAAM,SAAS,GAAG;EAChB,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;EACd,CAAC,CAAC,WAAW,CAAC;CACf,CAAC;AAEF;;wCAEwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,CAAC,GAAG,cAAc,CAAC;AACzB,MAAM,GAAG,GAAG;EACV,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC,oDAAoD,CAAC;EAC7D,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC,qDAAqD,CAAC;EAC9D,CAAC,CAAC,KAAK,CAAC,gFAAgF,CAAC;EACzF,CAAC,CAAC,KAAK,CAAC;EACR,CAAC,CAAC,KAAK,CAAC,8EAA8E,CAAC;EACvF,CAAC,CAAC,KAAK,CAAC;CACT,CAAC;AAEF,MAAM,QAAQ,GAAG;;EAEf,CAAC,CAAC,UAAU,CAAC;;EAEb,CAAC,CAAC,UAAU,CAAC;;;;IAIX,CAAC,CAAC,UAAU,CAAC;;EAEf,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;EACb,CAAC,CAAC,UAAU,CAAC;CACd,CAAC;AAEF,MAAM,OAAO,GAAG;;EAEd,CAAC,CAAC,SAAS,CAAC;;;;EAIZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;CACb,CAAC;AAEF;iBACiB;AACjB,MAAM,OAAO,GAAG;EACd,CAAC,CAAC,SAAS,CAAC;;EAEZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;;EAEZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;EACZ,CAAC,CAAC,SAAS,CAAC;CACb,CAAC;AAEF,MAAM,KAAK,GAAG,6FAA6F,CAAC;AAC5G,MAAM,MAAM,GAAG,6FAA6F,CAAC;AAC7G,MAAM,KAAK,GAAG;EACZ,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC,8GAA8G,KAAK;EAC7H,CAAC,CAAC,OAAO,CAAC;;EAEV,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC,wCAAwC,MAAM;EACxD,CAAC,CAAC,OAAO,CAAC,iFAAiF,MAAM;EACjG,CAAC,CAAC,OAAO,CAAC;EACV,CAAC,CAAC,OAAO,CAAC,yDAAyD,KAAK;EACxE,CAAC,CAAC,OAAO,CAAC;;CAEX,CAAC;AAEF;;;sDAGsD;AACtD,MAAM,UAAU,GAAG,CAAC,IAAoB,EAAU,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;KAC5E,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,GAAG,8DAA8D,CAAC;KAC7G,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,QAAQ,GAAmC;IACtD,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC;IAC3C,GAAG,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;IACxC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;IAClC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;IAC9C,GAAG,EAAE,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;IAC5B,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC;IAC3C,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;IACxC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;IACxC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"transcriptSkinCss.js","sourceRoot":"","sources":["../transcriptSkinCss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from 'react';
2
+ export interface HoldPress {
3
+ onPointerDown(e: ReactPointerEvent): void;
4
+ onPointerMove(e: ReactPointerEvent): void;
5
+ onPointerUp(): void;
6
+ onPointerLeave(): void;
7
+ onPointerCancel(): void;
8
+ onContextMenu(e: ReactMouseEvent): void;
9
+ onClick(): void;
10
+ holding: boolean;
11
+ }
12
+ /** A tap runs onTap; holding for `ms` runs onHold instead. Sliding off or a cancelled pointer (a scroll) runs neither.
13
+ *
14
+ * Sliding off is checked two ways. A touch pointer is implicitly captured by
15
+ * the element it went down on, so `pointerleave` never fires while the finger
16
+ * slides away; the capture is released on pointerdown, and every pointermove
17
+ * is also checked against the button's box, so a slide-off cancels on any
18
+ * pointer type whether or not the browser honours the release. */
19
+ export declare function useHoldPress(o: {
20
+ onTap: () => void;
21
+ onHold?: () => void;
22
+ ms?: number;
23
+ }): HoldPress;
24
+ //# sourceMappingURL=useHoldPress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHoldPress.d.ts","sourceRoot":"","sources":["../useHoldPress.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9F,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,aAAa,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,WAAW,IAAI,IAAI,CAAC;IACpB,cAAc,IAAI,IAAI,CAAC;IACvB,eAAe,IAAI,IAAI,CAAC;IACxB,aAAa,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;;;;kEAMkE;AAClE,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA2ElG"}
@@ -0,0 +1,85 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ /** A tap runs onTap; holding for `ms` runs onHold instead. Sliding off or a cancelled pointer (a scroll) runs neither.
3
+ *
4
+ * Sliding off is checked two ways. A touch pointer is implicitly captured by
5
+ * the element it went down on, so `pointerleave` never fires while the finger
6
+ * slides away; the capture is released on pointerdown, and every pointermove
7
+ * is also checked against the button's box, so a slide-off cancels on any
8
+ * pointer type whether or not the browser honours the release. */
9
+ export function useHoldPress(o) {
10
+ const { onTap, onHold, ms = 500 } = o;
11
+ const timer = useRef(null);
12
+ const held = useRef(false);
13
+ const cancelled = useRef(false);
14
+ const box = useRef(null);
15
+ const [holding, setHolding] = useState(false);
16
+ const holdRef = useRef(onHold);
17
+ holdRef.current = onHold;
18
+ const clear = useCallback(() => {
19
+ if (timer.current !== null) {
20
+ clearTimeout(timer.current);
21
+ timer.current = null;
22
+ }
23
+ box.current = null;
24
+ setHolding(false);
25
+ }, []);
26
+ useEffect(() => () => {
27
+ if (timer.current !== null)
28
+ clearTimeout(timer.current);
29
+ }, []);
30
+ const onPointerDown = useCallback((e) => {
31
+ if (e.button > 0)
32
+ return;
33
+ held.current = false;
34
+ cancelled.current = false;
35
+ if (!holdRef.current)
36
+ return;
37
+ const el = e.currentTarget;
38
+ // Undo a touch pointer's implicit capture, so leaving the button is seen.
39
+ if (el.hasPointerCapture?.(e.pointerId))
40
+ el.releasePointerCapture(e.pointerId);
41
+ clear();
42
+ const r = el.getBoundingClientRect();
43
+ box.current = { left: r.left, top: r.top, right: r.right, bottom: r.bottom };
44
+ setHolding(true);
45
+ timer.current = setTimeout(() => {
46
+ timer.current = null;
47
+ box.current = null;
48
+ held.current = true;
49
+ setHolding(false);
50
+ holdRef.current?.();
51
+ }, ms);
52
+ }, [clear, ms]);
53
+ const cancel = useCallback(() => {
54
+ if (timer.current !== null)
55
+ cancelled.current = true;
56
+ clear();
57
+ }, [clear]);
58
+ const onPointerMove = useCallback((e) => {
59
+ const b = box.current;
60
+ if (!b || timer.current === null)
61
+ return;
62
+ const { clientX: x, clientY: y } = e;
63
+ if (x < b.left || x > b.right || y < b.top || y > b.bottom)
64
+ cancel();
65
+ }, [cancel]);
66
+ const onClick = useCallback(() => {
67
+ if (held.current || cancelled.current) {
68
+ held.current = false;
69
+ cancelled.current = false;
70
+ return;
71
+ }
72
+ onTap();
73
+ }, [onTap]);
74
+ return {
75
+ onPointerDown,
76
+ onPointerMove,
77
+ onPointerUp: clear,
78
+ onPointerLeave: cancel,
79
+ onPointerCancel: cancel,
80
+ onContextMenu: (e) => e.preventDefault(),
81
+ onClick,
82
+ holding,
83
+ };
84
+ }
85
+ //# sourceMappingURL=useHoldPress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHoldPress.js","sourceRoot":"","sources":["../useHoldPress.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corenel/web-ui",
3
- "version": "0.13.2",
3
+ "version": "0.14.0",
4
4
  "license": "Elastic-2.0",
5
5
  "type": "module",
6
6
  "description": "Corenel browser dock/agent UI — the presentational components (transcript, composer, rich content, tool render, context manager, etc.). The prompd app's AgentPanel/PolicyEditor compose these on top.",
@@ -15,10 +15,10 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "@corenel/protocol": "0.17.0",
19
- "@corenel/tools-web": "0.11.3",
20
- "@corenel/ui-kit": "0.10.2",
21
- "@corenel/harness": "0.19.0"
18
+ "@corenel/harness": "0.21.0",
19
+ "@corenel/tools-web": "0.12.0",
20
+ "@corenel/protocol": "0.19.0",
21
+ "@corenel/ui-kit": "0.12.0"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": "^18.3.1",