@semiont/react-ui 0.5.26 → 0.5.28

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 (242) hide show
  1. package/README.md +28 -4
  2. package/dist/{PdfAnnotationCanvas.client-6ZSF6ZTJ.js → PdfAnnotationCanvas.client-C2IGG4SW.js} +33 -6
  3. package/dist/{PdfAnnotationCanvas.client-JCJMXWWJ.css → PdfAnnotationCanvas.client-TGDPPGXJ.css} +6 -1
  4. package/dist/{ar-YTUUGK2O.js → ar-FABPTJVB.js} +88 -26
  5. package/dist/{bn-ASGNGPMD.js → bn-LKP6BDMH.js} +88 -26
  6. package/dist/{chunk-L3WKRWP3.js → chunk-2GOHTTHW.js} +88 -26
  7. package/dist/{chunk-OBQOZCJE.js → chunk-2YHEE63S.js} +31 -31
  8. package/dist/{cs-WMYVAOZY.js → cs-YQYNWHRG.js} +88 -26
  9. package/dist/{da-FSHHN4D6.js → da-QHZOYKRY.js} +88 -26
  10. package/dist/{de-FJFO3TPT.js → de-GKA7RD7J.js} +88 -26
  11. package/dist/{el-XOH4QIAG.js → el-45T257AL.js} +88 -26
  12. package/dist/{en-3FCBW3YD.js → en-RVW5EQ66.js} +4 -2
  13. package/dist/{es-HDX4QI7E.js → es-AVER7RU4.js} +88 -26
  14. package/dist/{fa-DJ6WTFTJ.js → fa-K3VPK3O2.js} +88 -26
  15. package/dist/{fi-4S7H7W7U.js → fi-5NEKF7EB.js} +88 -26
  16. package/dist/{fr-6UJSYHXC.js → fr-FUMNDLBZ.js} +88 -26
  17. package/dist/{he-ZZJOHJX2.js → he-3JGNA3PR.js} +88 -26
  18. package/dist/{hi-HZJTAW7U.js → hi-IJY375DF.js} +88 -26
  19. package/dist/{id-E3I6ILEM.js → id-LWHKJ7ZD.js} +88 -26
  20. package/dist/index.css +380 -524
  21. package/dist/index.d.ts +318 -192
  22. package/dist/index.js +2960 -2421
  23. package/dist/integrations/css-modules-helper.js +1 -3
  24. package/dist/{it-ULAPAD7U.js → it-EBVOV4RW.js} +88 -26
  25. package/dist/{ja-SAHZQ4CZ.js → ja-KWRIX2NF.js} +88 -26
  26. package/dist/{ko-DFU2ADQ4.js → ko-L5CJMFDS.js} +88 -26
  27. package/dist/{ms-NWL76XNT.js → ms-LSNMJDR2.js} +88 -26
  28. package/dist/{nl-ATCM76WN.js → nl-ZB32MB7U.js} +88 -26
  29. package/dist/{no-UIAQ5RJF.js → no-4GTNY7M5.js} +88 -26
  30. package/dist/{pl-NOECQDXD.js → pl-LUHBLTHB.js} +88 -26
  31. package/dist/{pt-SVWIIUPC.js → pt-C4H3UNQ6.js} +88 -26
  32. package/dist/{ro-NR2DRTZG.js → ro-GGITS5V4.js} +88 -26
  33. package/dist/{sv-STVJ37JP.js → sv-T56RTLBP.js} +88 -26
  34. package/dist/test-utils.css +1 -1
  35. package/dist/test-utils.d.ts +1 -1
  36. package/dist/test-utils.js +2 -2
  37. package/dist/{th-UWQR4K54.js → th-22X2IWCB.js} +88 -26
  38. package/dist/{tr-WNXZSD27.js → tr-77TFG62H.js} +88 -26
  39. package/dist/{uk-SJRMB47Y.js → uk-MIIL6NXT.js} +88 -26
  40. package/dist/{vi-TMRQFES2.js → vi-7JYOIGNV.js} +88 -26
  41. package/dist/{zh-QOL3LYEM.js → zh-ID6DRYU4.js} +88 -26
  42. package/package.json +11 -10
  43. package/src/components/AssistProgress.tsx +178 -134
  44. package/src/components/CodeMirrorRenderer.tsx +8 -8
  45. package/src/components/{EntityFoundLog.tsx → ItemFoundLog.tsx} +12 -7
  46. package/src/components/ProtectedErrorBoundary.css +3 -1
  47. package/src/components/StatusDisplay.css +1 -1
  48. package/src/components/Toast.css +3 -1
  49. package/src/components/__tests__/AssistProgress.test.tsx +268 -141
  50. package/src/components/annotation/annotation-entries.css +0 -4
  51. package/src/components/annotation/references.css +0 -4
  52. package/src/components/image-annotation/AnnotationOverlay.tsx +6 -6
  53. package/src/components/image-annotation/SvgDrawingCanvas.tsx +1 -1
  54. package/src/components/image-annotation/__tests__/AnnotationOverlay.click.test.tsx +7 -9
  55. package/src/components/image-annotation/__tests__/SvgDrawingCanvas.click.test.tsx +1 -2
  56. package/src/components/layout/Header.css +0 -4
  57. package/src/components/layout/LeftSidebar.css +0 -4
  58. package/src/components/modals/ComposeStep.tsx +218 -0
  59. package/src/components/modals/ConfigureGatherStep.tsx +10 -18
  60. package/src/components/modals/ConfigureGenerationStep.tsx +131 -54
  61. package/src/components/modals/ConfigureSearchStep.tsx +42 -40
  62. package/src/components/modals/ContextSummary.tsx +185 -72
  63. package/src/components/modals/CorpusPane.tsx +75 -0
  64. package/src/components/modals/DiscardPrompt.tsx +38 -0
  65. package/src/components/modals/GatherContextStep.tsx +237 -107
  66. package/src/components/modals/ReferenceWizardModal.tsx +287 -60
  67. package/src/components/modals/ResourceGenerateModal.tsx +233 -109
  68. package/src/components/modals/SearchModal.css +335 -111
  69. package/src/components/modals/SearchModal.tsx +1 -1
  70. package/src/components/modals/SearchResultsStep.tsx +63 -88
  71. package/src/components/modals/WizardFooter.tsx +69 -0
  72. package/src/components/modals/__tests__/ComposeStep.test.tsx +152 -0
  73. package/src/components/modals/__tests__/ConfigureGatherStep.test.tsx +14 -26
  74. package/src/components/modals/__tests__/ConfigureGenerationStep.test.tsx +290 -0
  75. package/src/components/modals/__tests__/ConfigureSearchStep.test.tsx +95 -0
  76. package/src/components/modals/__tests__/GatherContextStep.resource.test.tsx +463 -25
  77. package/src/components/modals/__tests__/ReferenceWizardModal.test.tsx +635 -0
  78. package/src/components/modals/__tests__/ResourceGenerateModal.test.tsx +277 -85
  79. package/src/components/modals/__tests__/SearchModal.search-wiring.test.tsx +6 -2
  80. package/src/components/modals/__tests__/SearchResultsStep.test.tsx +61 -0
  81. package/src/components/modals/__tests__/WizardFooter.test.tsx +344 -0
  82. package/src/components/modals/modals.css +16 -42
  83. package/src/components/navigation/NavigationTabs.css +0 -20
  84. package/src/components/pdf-annotation/PdfAnnotationCanvas.css +21 -2
  85. package/src/components/pdf-annotation/PdfAnnotationCanvas.tsx +36 -3
  86. package/src/components/pdf-annotation/__tests__/PdfAnnotationCanvas.test.tsx +41 -6
  87. package/src/components/resource/AnnotateView.tsx +19 -8
  88. package/src/components/resource/AnnotationHistory.tsx +2 -0
  89. package/src/components/resource/BrowseView.tsx +20 -9
  90. package/src/components/resource/ResourceViewer.tsx +27 -28
  91. package/src/components/resource/__tests__/AnnotateView.embeddable.test.tsx +1 -1
  92. package/src/components/resource/__tests__/AnnotateView.focus.test.tsx +50 -0
  93. package/src/components/resource/__tests__/AnnotationHistory.test.tsx +2 -0
  94. package/src/components/resource/__tests__/BrowseView.embeddable.test.tsx +1 -1
  95. package/src/components/resource/__tests__/BrowseView.test.tsx +38 -12
  96. package/src/components/resource/__tests__/ResourceViewer.embeddable.test.tsx +47 -3
  97. package/src/components/resource/annotate-renderers.tsx +3 -3
  98. package/src/components/resource/event-formatting.ts +0 -3
  99. package/src/components/resource/panels/AssessmentEntry.tsx +1 -1
  100. package/src/components/resource/panels/AssessmentPanel.css +5 -6
  101. package/src/components/resource/panels/AssistSection.css +95 -263
  102. package/src/components/resource/panels/AssistSection.tsx +4 -4
  103. package/src/components/resource/panels/AssistShell.tsx +12 -4
  104. package/src/components/resource/panels/CollaborationPanel.css +47 -22
  105. package/src/components/resource/panels/CollaborationPanel.tsx +93 -2
  106. package/src/components/resource/panels/CommentEntry.tsx +1 -1
  107. package/src/components/resource/panels/CommentsPanel.css +0 -16
  108. package/src/components/resource/panels/HighlightEntry.tsx +1 -1
  109. package/src/components/resource/panels/HighlightPanel.css +0 -7
  110. package/src/components/resource/panels/JsonLdPanel.css +0 -4
  111. package/src/components/resource/panels/ReferenceEntry.tsx +10 -3
  112. package/src/components/resource/panels/ReferencesPanel.css +0 -12
  113. package/src/components/resource/panels/ReferencesPanel.tsx +16 -20
  114. package/src/components/resource/panels/ResourceInfoPanel.css +0 -32
  115. package/src/components/resource/panels/ResourceInfoPanel.tsx +89 -20
  116. package/src/components/resource/panels/StatisticsPanel.css +0 -20
  117. package/src/components/resource/panels/TagEntry.tsx +1 -1
  118. package/src/components/resource/panels/TaggingPanel.css +0 -4
  119. package/src/components/resource/panels/TaggingPanel.tsx +2 -10
  120. package/src/components/resource/panels/UnifiedAnnotationsPanel.css +0 -4
  121. package/src/components/resource/panels/UnifiedAnnotationsPanel.tsx +7 -2
  122. package/src/components/resource/panels/__tests__/AssessmentEntry.test.tsx +0 -1
  123. package/src/components/resource/panels/__tests__/AssistSection.test.tsx +48 -50
  124. package/src/components/resource/panels/__tests__/AssistShell.test.tsx +11 -6
  125. package/src/components/resource/panels/__tests__/CollaborationPanel.test.tsx +89 -0
  126. package/src/components/resource/panels/__tests__/CommentEntry.test.tsx +1 -2
  127. package/src/components/resource/panels/__tests__/HighlightEntry.test.tsx +0 -1
  128. package/src/components/resource/panels/__tests__/HighlightPanel.annotationProgress.test.tsx +44 -36
  129. package/src/components/resource/panels/__tests__/ReferenceEntry.test.tsx +41 -1
  130. package/src/components/resource/panels/__tests__/ReferencesPanel.headless.test.tsx +1 -1
  131. package/src/components/resource/panels/__tests__/ReferencesPanel.test.tsx +67 -54
  132. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +185 -7
  133. package/src/components/resource/panels/__tests__/TagEntry.test.tsx +0 -1
  134. package/src/components/settings/SettingsPanel.css +0 -4
  135. package/src/features/auth/auth.css +2 -26
  136. package/src/features/resource-compose/__tests__/ResourceComposePage.test.tsx +0 -65
  137. package/src/features/resource-compose/components/ResourceComposePage.tsx +17 -130
  138. package/src/features/resource-compose/state/__tests__/compose-page-state-unit.test.ts +1 -76
  139. package/src/features/resource-compose/state/compose-page-state-unit.ts +5 -48
  140. package/src/features/resource-discovery/__tests__/ResourceDiscoveryPage.test.tsx +55 -0
  141. package/src/features/resource-discovery/components/ResourceDiscoveryPage.tsx +29 -0
  142. package/src/features/resource-discovery/state/__tests__/discover-state-unit.test.ts +53 -3
  143. package/src/features/resource-discovery/state/discover-state-unit.ts +29 -8
  144. package/src/features/resource-viewer/__tests__/ResourceViewerPage.test.tsx +71 -15
  145. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +166 -71
  146. package/src/features/resource-viewer/hooks/__tests__/useResourceViewedReport.test.tsx +63 -0
  147. package/src/features/resource-viewer/hooks/useResourceViewedReport.ts +33 -0
  148. package/src/features/resource-viewer/state/__tests__/resource-viewer-page-state-unit.test.ts +2 -2
  149. package/src/features/resource-viewer/state/resource-viewer-page-state-unit.ts +1 -1
  150. package/src/styles/core/buttons.css +3 -1
  151. package/src/styles/core/forms.css +35 -29
  152. package/src/styles/core/indicators.css +0 -4
  153. package/src/styles/core/inputs.css +0 -4
  154. package/src/styles/core/progress.css +2 -34
  155. package/src/styles/core/sliders.css +0 -4
  156. package/src/styles/core/toggles.css +0 -4
  157. package/src/styles/features/resource-discovery.css +13 -0
  158. package/src/styles/features/resource-viewer.css +0 -42
  159. package/src/styles/features/resource.css +0 -4
  160. package/src/styles/motivations/motivation-assessment.css +2 -2
  161. package/src/styles/panels/history-panel.css +0 -40
  162. package/src/styles/panels/user-panel.css +0 -3
  163. package/src/styles/patterns/panel-helpers.css +0 -27
  164. package/src/styles/patterns/panel-sections.css +0 -59
  165. package/src/styles/patterns/panels-base.css +0 -32
  166. package/translations/ar.json +84 -24
  167. package/translations/bn.json +84 -24
  168. package/translations/cs.json +84 -24
  169. package/translations/da.json +84 -24
  170. package/translations/de.json +84 -24
  171. package/translations/el.json +84 -24
  172. package/translations/en.json +84 -24
  173. package/translations/es.json +84 -24
  174. package/translations/fa.json +84 -24
  175. package/translations/fi.json +84 -24
  176. package/translations/fr.json +84 -24
  177. package/translations/he.json +84 -24
  178. package/translations/hi.json +84 -24
  179. package/translations/id.json +84 -24
  180. package/translations/it.json +84 -24
  181. package/translations/ja.json +84 -24
  182. package/translations/ko.json +84 -24
  183. package/translations/ms.json +84 -24
  184. package/translations/nl.json +84 -24
  185. package/translations/no.json +84 -24
  186. package/translations/pl.json +84 -24
  187. package/translations/pt.json +84 -24
  188. package/translations/ro.json +84 -24
  189. package/translations/sv.json +84 -24
  190. package/translations/th.json +84 -24
  191. package/translations/tr.json +84 -24
  192. package/translations/uk.json +84 -24
  193. package/translations/vi.json +84 -24
  194. package/translations/zh.json +84 -24
  195. package/dist/PdfAnnotationCanvas.client-6ZSF6ZTJ.js.map +0 -1
  196. package/dist/PdfAnnotationCanvas.client-JCJMXWWJ.css.map +0 -1
  197. package/dist/ar-YTUUGK2O.js.map +0 -1
  198. package/dist/bn-ASGNGPMD.js.map +0 -1
  199. package/dist/chunk-BTUG3VJJ.js.map +0 -1
  200. package/dist/chunk-L3WKRWP3.js.map +0 -1
  201. package/dist/chunk-O23TLLXW.js.map +0 -1
  202. package/dist/chunk-OBQOZCJE.js.map +0 -1
  203. package/dist/chunk-QT7LYM72.js.map +0 -1
  204. package/dist/chunk-VXASXU4K.js.map +0 -1
  205. package/dist/chunk-XUDKYAVC.js +0 -21
  206. package/dist/chunk-XUDKYAVC.js.map +0 -1
  207. package/dist/cs-WMYVAOZY.js.map +0 -1
  208. package/dist/da-FSHHN4D6.js.map +0 -1
  209. package/dist/de-FJFO3TPT.js.map +0 -1
  210. package/dist/el-XOH4QIAG.js.map +0 -1
  211. package/dist/en-3FCBW3YD.js.map +0 -1
  212. package/dist/es-HDX4QI7E.js.map +0 -1
  213. package/dist/fa-DJ6WTFTJ.js.map +0 -1
  214. package/dist/fi-4S7H7W7U.js.map +0 -1
  215. package/dist/fr-6UJSYHXC.js.map +0 -1
  216. package/dist/he-ZZJOHJX2.js.map +0 -1
  217. package/dist/hi-HZJTAW7U.js.map +0 -1
  218. package/dist/id-E3I6ILEM.js.map +0 -1
  219. package/dist/index.css.map +0 -1
  220. package/dist/index.js.map +0 -1
  221. package/dist/integrations/css-modules-helper.js.map +0 -1
  222. package/dist/integrations/styled-components-theme.js.map +0 -1
  223. package/dist/it-ULAPAD7U.js.map +0 -1
  224. package/dist/ja-SAHZQ4CZ.js.map +0 -1
  225. package/dist/ko-DFU2ADQ4.js.map +0 -1
  226. package/dist/ms-NWL76XNT.js.map +0 -1
  227. package/dist/nl-ATCM76WN.js.map +0 -1
  228. package/dist/no-UIAQ5RJF.js.map +0 -1
  229. package/dist/pl-NOECQDXD.js.map +0 -1
  230. package/dist/pt-SVWIIUPC.js.map +0 -1
  231. package/dist/ro-NR2DRTZG.js.map +0 -1
  232. package/dist/sv-STVJ37JP.js.map +0 -1
  233. package/dist/test-utils.css.map +0 -1
  234. package/dist/test-utils.js.map +0 -1
  235. package/dist/th-UWQR4K54.js.map +0 -1
  236. package/dist/tr-WNXZSD27.js.map +0 -1
  237. package/dist/uk-SJRMB47Y.js.map +0 -1
  238. package/dist/vi-TMRQFES2.js.map +0 -1
  239. package/dist/zh-QOL3LYEM.js.map +0 -1
  240. package/src/components/modals/ResourceSearchModal.tsx +0 -224
  241. package/src/components/modals/__tests__/ResourceSearchModal.test.tsx +0 -159
  242. package/src/integrations/tailwind-plugin.cjs +0 -224
@@ -51,7 +51,7 @@ export interface AnnotateMediaRendererProps {
51
51
  // Text-path extras. Optional on the shared interface: a custom image or PDF
52
52
  // renderer simply ignores them, the same way `MediaRendererProps.session` is
53
53
  // documented to be ignorable.
54
- newAnnotationIds?: Set<string>;
54
+ sparkleAnnotationIds?: Set<string>;
55
55
  scrollToAnnotationId?: string | null;
56
56
  showLineNumbers?: boolean;
57
57
  enableWidgets?: boolean;
@@ -66,7 +66,7 @@ export function TextAnnotateRenderer({
66
66
  content,
67
67
  annotations,
68
68
  session,
69
- newAnnotationIds,
69
+ sparkleAnnotationIds,
70
70
  hoveredAnnotationId,
71
71
  scrollToAnnotationId,
72
72
  showLineNumbers = false,
@@ -84,7 +84,7 @@ export function TextAnnotateRenderer({
84
84
  content={content}
85
85
  segments={segments}
86
86
  editable={false}
87
- newAnnotationIds={newAnnotationIds}
87
+ sparkleAnnotationIds={sparkleAnnotationIds}
88
88
  {...(hoveredAnnotationId !== undefined && { hoveredAnnotationId })}
89
89
  {...(scrollToAnnotationId !== undefined && { scrollToAnnotationId })}
90
90
  sourceView={true}
@@ -81,7 +81,6 @@ export function formatEventType(type: PersistedEventType, t: TranslateFn, payloa
81
81
 
82
82
  case 'job:completed':
83
83
  case 'job:started':
84
- case 'job:progress':
85
84
  case 'job:failed':
86
85
  return t('jobEvent');
87
86
 
@@ -128,7 +127,6 @@ export function getEventEmoji(type: PersistedEventType, payload?: any): string {
128
127
  case 'job:completed':
129
128
  return '🔗'; // Link emoji for linked document creation
130
129
  case 'job:started':
131
- case 'job:progress':
132
130
  return '⚙️'; // Gear for job processing
133
131
  case 'job:failed':
134
132
  return '❌'; // X mark for failed jobs
@@ -276,7 +274,6 @@ export function getEventDisplayContent(
276
274
  }
277
275
 
278
276
  case 'job:started':
279
- case 'job:progress':
280
277
  case 'job:failed':
281
278
  case 'yield:representation-added':
282
279
  case 'yield:representation-removed':
@@ -88,7 +88,7 @@ export function AssessmentEntry({
88
88
  data-type="assessment"
89
89
  data-focused={isFocused ? 'true' : 'false'}
90
90
  onClick={() => {
91
- session?.client.browse.click(assessment.id, assessment.motivation);
91
+ session?.client.browse.click(assessment.id);
92
92
  }}
93
93
  {...hoverProps}
94
94
  >
@@ -30,10 +30,6 @@
30
30
  letter-spacing: 0.05em;
31
31
  }
32
32
 
33
- [data-theme="dark"] .semiont-assessment-panel__label {
34
- color: var(--semiont-text-secondary);
35
- }
36
-
37
33
  .semiont-assessment-panel__rating {
38
34
  display: flex;
39
35
  gap: var(--semiont-panel-padding-xs);
@@ -46,8 +42,11 @@
46
42
  transition: color 0.2s ease;
47
43
  }
48
44
 
45
+ /* An UNRATED star must recede. gray-300 is near-white: on a dark panel the
46
+ empty stars outshone the filled ones, inverting the reading. Dark takes a
47
+ dim grey; the filled star keeps the warning hue. */
49
48
  [data-theme="dark"] .semiont-assessment-panel__star {
50
- color: var(--semiont-color-gray-300);
49
+ color: var(--semiont-color-gray-600);
51
50
  }
52
51
 
53
52
  .semiont-assessment-panel__star:hover {
@@ -59,7 +58,7 @@
59
58
  }
60
59
 
61
60
  [data-theme="dark"] .semiont-assessment-panel__star--filled {
62
- color: var(--semiont-color-warning);
61
+ color: var(--semiont-color-warning-light);
63
62
  }
64
63
 
65
64
  .semiont-assessment-panel__textarea {
@@ -126,267 +126,119 @@
126
126
  Detection Log (Completed Results)
127
127
  ============================================ */
128
128
 
129
-
130
129
  /* ============================================
131
130
  Detection Progress Display
132
131
  ============================================ */
133
132
 
134
- .semiont-annotation-progress {
135
- background-color: var(--semiont-bg-primary);
136
- border-radius: 0.5rem;
137
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
138
- padding: 1rem;
139
- border: 2px solid var(--semiont-color-blue-500);
140
- }
141
-
142
- [data-theme="dark"] .semiont-annotation-progress {
143
- background-color: var(--semiont-color-gray-800);
144
- border-color: var(--semiont-color-blue-600);
145
- }
146
-
147
- /* Header section */
148
- .semiont-annotation-header {
149
- display: flex;
150
- align-items: center;
151
- justify-content: space-between;
152
- margin-bottom: 0.75rem;
153
- }
154
-
155
- .semiont-annotation-title {
156
- font-size: 0.875rem;
157
- font-weight: 600;
158
- color: var(--semiont-color-gray-900);
159
- display: flex;
160
- align-items: center;
161
- gap: 0.5rem;
162
- margin: 0;
163
- }
164
-
165
- [data-theme="dark"] .semiont-annotation-title {
166
- color: var(--semiont-color-gray-100);
167
- }
168
-
169
- .semiont-annotation-sparkle {
170
- font-size: 1.125rem;
171
- animation: semiont-sparkle-infinite 1.5s ease-in-out infinite;
172
- }
173
-
174
- @keyframes semiont-sparkle-infinite {
175
- 0%, 100% {
176
- opacity: 0.5;
177
- transform: scale(1);
178
- }
179
- 50% {
180
- opacity: 1;
181
- transform: scale(1.1);
182
- }
183
- }
184
-
185
- .semiont-annotation-cancel {
186
- color: var(--semiont-color-gray-600);
187
- background: none;
188
- border: none;
189
- padding: 0;
190
- font-size: 0.875rem;
191
- cursor: pointer;
192
- transition: color 0.2s;
193
- }
194
-
195
- .semiont-annotation-cancel:hover {
196
- color: var(--semiont-color-gray-900);
197
- }
198
-
199
- [data-theme="dark"] .semiont-annotation-cancel {
200
- color: var(--semiont-color-gray-400);
201
- }
202
-
203
- [data-theme="dark"] .semiont-annotation-cancel:hover {
204
- color: var(--semiont-color-gray-300);
205
- }
206
-
207
- /* Completed entity types log */
208
- .semiont-annotation-log {
209
- margin-bottom: 0.75rem;
133
+ /* ── Assist progress: TWO containers, not five ──────────────────────────────
134
+ The widget was `.semiont-assist-widget` > `.semiont-annotation-progress` >
135
+ `__params` > `__message`, each with its own border, padding and tint — four
136
+ nested boxes around one sentence of status. The outer `.semiont-assist-widget`
137
+ (above) already provides the card; this provides the status region inside it.
138
+ ASSIST-PROGRESS-CONSOLIDATION P3. */
139
+ .semiont-assist-progress {
210
140
  display: flex;
211
141
  flex-direction: column;
212
- gap: 0.25rem;
142
+ gap: 0.375rem;
143
+ position: relative;
213
144
  }
214
145
 
215
- .semiont-annotation-log-item {
216
- font-size: 0.75rem;
217
- color: var(--semiont-color-gray-600);
146
+ .semiont-assist-progress__status {
218
147
  display: flex;
219
- align-items: center;
148
+ align-items: baseline;
220
149
  gap: 0.5rem;
150
+ padding-right: 1.5rem; /* room for the single control */
151
+ font-size: var(--semiont-text-sm);
152
+ font-weight: var(--semiont-font-medium);
153
+ color: var(--semiont-text-primary);
221
154
  }
222
155
 
223
- [data-theme="dark"] .semiont-annotation-log-item {
224
- color: var(--semiont-color-gray-400);
225
- }
226
-
227
- .semiont-annotation-check {
228
- color: var(--semiont-color-green-600);
229
- }
230
-
231
- [data-theme="dark"] .semiont-annotation-check {
232
- color: var(--semiont-color-green-400);
156
+ .semiont-assist-progress__icon {
157
+ flex: none;
233
158
  }
234
159
 
235
- .semiont-annotation-entity-type {
236
- font-weight: 500;
160
+ /* The subject and the parameters are context for the status, not peers of it. */
161
+ .semiont-assist-progress__subject,
162
+ .semiont-assist-progress__params {
163
+ font-size: var(--semiont-text-xs);
164
+ color: var(--semiont-text-secondary);
237
165
  }
238
166
 
239
- .semiont-annotation-progress__params {
240
- margin-bottom: 0.75rem;
241
- padding: 0.5rem;
242
- background-color: rgba(59, 130, 246, 0.05);
243
- border-radius: 0.375rem;
244
- border: 1px solid rgba(59, 130, 246, 0.2);
167
+ [data-theme="dark"] .semiont-assist-progress__subject,
168
+ [data-theme="dark"] .semiont-assist-progress__params {
169
+ color: var(--semiont-text-secondary);
245
170
  }
246
171
 
247
- [data-theme="dark"] .semiont-annotation-progress__params {
248
- background-color: rgba(59, 130, 246, 0.1);
249
- border-color: rgba(59, 130, 246, 0.3);
172
+ .semiont-assist-progress__subject {
173
+ font-variant-numeric: tabular-nums;
250
174
  }
251
175
 
252
- .semiont-annotation-progress__params-title {
253
- font-size: 0.75rem;
254
- font-weight: 600;
255
- color: var(--semiont-color-blue-700);
256
- margin-bottom: 0.25rem;
257
- }
258
-
259
- [data-theme="dark"] .semiont-annotation-progress__params-title {
260
- color: var(--semiont-color-blue-300);
176
+ /* D8: the finished run's artifact, offered as a link. */
177
+ /* The finished run's artifact — the ended frame's primary affordance
178
+ (GENERATION-ARRIVAL P1, D3's fallback): a button-shaped invitation to open
179
+ what was made, not an underlined footnote beside the bar. */
180
+ .semiont-assist-progress__outcome {
181
+ align-self: stretch;
182
+ padding: 0.5rem 0.75rem;
183
+ border: 1px solid var(--semiont-color-primary-300);
184
+ border-radius: 0.5rem;
185
+ background: var(--semiont-color-primary-50);
186
+ cursor: pointer;
187
+ font-size: var(--semiont-text-sm);
188
+ font-weight: var(--semiont-font-medium);
189
+ color: var(--semiont-color-primary-700);
190
+ text-align: left;
261
191
  }
262
192
 
263
- .semiont-annotation-progress__param {
264
- font-size: 0.75rem;
265
- color: var(--semiont-color-gray-700);
193
+ .semiont-assist-progress__outcome:hover {
194
+ border-color: var(--semiont-color-primary-400);
195
+ background: var(--semiont-color-primary-100);
196
+ color: var(--semiont-color-primary-800);
266
197
  }
267
198
 
268
- [data-theme="dark"] .semiont-annotation-progress__param {
269
- color: var(--semiont-color-gray-300);
199
+ [data-theme="dark"] .semiont-assist-progress__outcome {
200
+ border-color: var(--semiont-color-primary-700);
201
+ background: var(--semiont-color-primary-900);
202
+ color: var(--semiont-color-primary-300);
270
203
  }
271
204
 
272
- .semiont-annotation-progress__param-label {
273
- font-weight: 500;
205
+ [data-theme="dark"] .semiont-assist-progress__outcome:hover {
206
+ border-color: var(--semiont-color-primary-600);
207
+ background: var(--semiont-color-primary-800);
208
+ color: var(--semiont-color-primary-200);
274
209
  }
275
210
 
276
- .semiont-annotation-progress__status {
211
+ .semiont-assist-progress__params {
277
212
  display: flex;
278
- flex-direction: column;
213
+ flex-wrap: wrap;
279
214
  gap: 0.5rem;
280
- position: relative;
281
215
  }
282
216
 
283
- .semiont-annotation-progress__message {
284
- display: flex;
285
- align-items: center;
286
- gap: 0.5rem;
287
- font-size: 0.875rem;
288
- color: var(--semiont-color-gray-900);
289
- font-weight: 500;
290
- padding: 0.75rem 2.5rem 0.75rem 1rem; /* Extra right padding for close button */
291
- border-radius: 0.5rem;
292
- background: linear-gradient(135deg, rgba(59, 130, 246, 0.15), rgba(37, 99, 235, 0.15));
293
- border: 2px solid rgba(59, 130, 246, 0.3);
294
- animation: semiont-detection-pulse 2s ease-in-out infinite;
217
+ .semiont-assist-progress__param-label {
218
+ font-weight: var(--semiont-font-medium);
295
219
  }
296
220
 
297
- .semiont-annotation-progress__close {
221
+ /* One control, top-right, quiet until hovered. */
222
+ .semiont-assist-progress__control {
298
223
  position: absolute;
299
- top: 0.5rem;
300
- right: 0.5rem;
301
- width: 1.5rem;
302
- height: 1.5rem;
303
- border: none;
304
- background-color: rgba(0, 0, 0, 0.1);
305
- color: var(--semiont-color-gray-700);
306
- font-size: 1.25rem;
224
+ top: 0;
225
+ right: 0;
226
+ padding: 0.125rem 0.25rem;
307
227
  line-height: 1;
308
- border-radius: 0.25rem;
228
+ background: none;
229
+ border: none;
309
230
  cursor: pointer;
310
- display: flex;
311
- align-items: center;
312
- justify-content: center;
313
- transition: all 0.2s ease;
231
+ color: var(--semiont-text-secondary);
314
232
  }
315
233
 
316
- .semiont-annotation-progress__close:hover {
317
- background-color: rgba(0, 0, 0, 0.2);
318
- color: var(--semiont-color-gray-900);
234
+ .semiont-assist-progress__control:hover {
235
+ color: var(--semiont-text-primary);
319
236
  }
320
237
 
321
- [data-theme="dark"] .semiont-annotation-progress__close {
322
- background-color: rgba(255, 255, 255, 0.1);
323
- color: var(--semiont-color-gray-300);
324
- }
325
-
326
- [data-theme="dark"] .semiont-annotation-progress__close:hover {
327
- background-color: rgba(255, 255, 255, 0.2);
328
- color: var(--semiont-color-gray-100);
329
- }
330
-
331
- [data-theme="dark"] .semiont-annotation-progress__message {
332
- color: var(--semiont-color-gray-100);
333
- background: linear-gradient(135deg, rgba(59, 130, 246, 0.25), rgba(37, 99, 235, 0.25));
334
- border-color: rgba(59, 130, 246, 0.5);
335
- }
336
-
337
- @keyframes semiont-detection-pulse {
338
- 0%, 100% {
339
- opacity: 1;
340
- transform: scale(1);
341
- }
342
- 50% {
343
- opacity: 0.85;
344
- transform: scale(1.02);
345
- }
346
- }
347
-
348
- .semiont-annotation-progress__icon {
349
- font-size: 1.125rem;
350
- animation: semiont-sparkle-rotate 2s linear infinite;
351
- }
352
-
353
- @keyframes semiont-sparkle-rotate {
354
- 0% {
355
- transform: rotate(0deg) scale(1);
356
- filter: brightness(1);
357
- }
358
- 25% {
359
- transform: rotate(90deg) scale(1.2);
360
- filter: brightness(1.3);
361
- }
362
- 50% {
363
- transform: rotate(180deg) scale(1);
364
- filter: brightness(1);
365
- }
366
- 75% {
367
- transform: rotate(270deg) scale(1.2);
368
- filter: brightness(1.3);
369
- }
370
- 100% {
371
- transform: rotate(360deg) scale(1);
372
- filter: brightness(1);
373
- }
374
- }
375
-
376
- .semiont-annotation-progress__details {
377
- font-size: 0.75rem;
378
- color: var(--semiont-color-gray-500);
379
- }
380
-
381
- [data-theme="dark"] .semiont-annotation-progress__details {
382
- color: var(--semiont-color-gray-400);
238
+ [data-theme="dark"] .semiont-assist-progress__control {
239
+ color: var(--semiont-text-secondary);
383
240
  }
384
241
 
385
- /* ============================================
386
- Motivation-Specific Theming via data-type
387
- ============================================ */
388
-
389
- /* Highlight */
390
242
  .semiont-assist-widget[data-type="highlight"] {
391
243
  border-color: var(--semiont-color-yellow-300);
392
244
  }
@@ -436,56 +288,36 @@
436
288
  ============================================ */
437
289
 
438
290
  /* Highlight - Yellow */
439
- .semiont-annotation-progress[data-type="highlight"] .semiont-annotation-progress__message {
440
- background: linear-gradient(135deg, rgba(250, 204, 21, 0.15), rgba(234, 179, 8, 0.15));
441
- border-color: rgba(250, 204, 21, 0.3);
442
- }
443
291
 
444
- [data-theme="dark"] .semiont-annotation-progress[data-type="highlight"] .semiont-annotation-progress__message {
445
- background: linear-gradient(135deg, rgba(250, 204, 21, 0.25), rgba(234, 179, 8, 0.25));
446
- border-color: rgba(250, 204, 21, 0.5);
447
- }
448
-
449
- /* Comment - Gray */
450
- .semiont-annotation-progress[data-type="comment"] .semiont-annotation-progress__message {
451
- background: linear-gradient(135deg, rgba(107, 114, 128, 0.15), rgba(75, 85, 99, 0.15));
452
- border-color: rgba(107, 114, 128, 0.3);
453
- }
454
-
455
- [data-theme="dark"] .semiont-annotation-progress[data-type="comment"] .semiont-annotation-progress__message {
456
- background: linear-gradient(135deg, rgba(107, 114, 128, 0.25), rgba(75, 85, 99, 0.25));
457
- border-color: rgba(107, 114, 128, 0.5);
458
- }
459
-
460
- /* Assessment - Purple */
461
- .semiont-annotation-progress[data-type="assessment"] .semiont-annotation-progress__message {
462
- background: linear-gradient(135deg, rgba(168, 85, 247, 0.15), rgba(147, 51, 234, 0.15));
463
- border-color: rgba(168, 85, 247, 0.3);
464
- }
465
-
466
- [data-theme="dark"] .semiont-annotation-progress[data-type="assessment"] .semiont-annotation-progress__message {
467
- background: linear-gradient(135deg, rgba(168, 85, 247, 0.25), rgba(147, 51, 234, 0.25));
468
- border-color: rgba(168, 85, 247, 0.5);
469
- }
470
-
471
- /* Tag - Orange */
472
- .semiont-annotation-progress[data-type="tag"] .semiont-annotation-progress__message {
473
- background: linear-gradient(135deg, rgba(251, 146, 60, 0.15), rgba(249, 115, 22, 0.15));
474
- border-color: rgba(251, 146, 60, 0.3);
292
+ /*
293
+ * The progress bar. `AssistProgress` is its only consumer in the whole
294
+ * package, so it lives here rather than in `styles/core/` — it was defined in
295
+ * three files while nothing else rendered it (CLEAN-PROGRESS D4). If a second
296
+ * consumer ever appears, promoting these rules to core is a move, not a copy.
297
+ *
298
+ * The track is NOT `--semiont-bg-secondary`: that is exactly
299
+ * `.semiont-assist-widget`'s own background, so the track went invisible inside
300
+ * the card and the fill floated with nothing to measure it against (spotted in
301
+ * live testing, 2026-08-12).
302
+ */
303
+ .semiont-progress-bar {
304
+ width: 100%;
305
+ height: 0.5rem;
306
+ overflow: hidden;
307
+ border-radius: var(--semiont-radius-full);
308
+ background-color: var(--semiont-color-gray-200);
475
309
  }
476
310
 
477
- [data-theme="dark"] .semiont-annotation-progress[data-type="tag"] .semiont-annotation-progress__message {
478
- background: linear-gradient(135deg, rgba(251, 146, 60, 0.25), rgba(249, 115, 22, 0.25));
479
- border-color: rgba(251, 146, 60, 0.5);
311
+ [data-theme="dark"] .semiont-progress-bar {
312
+ background-color: var(--semiont-color-gray-700);
480
313
  }
481
314
 
482
- /* Reference - Blue */
483
- .semiont-annotation-progress[data-type="reference"] .semiont-annotation-progress__message {
484
- background: linear-gradient(135deg, rgba(59, 130, 246, 0.15), rgba(37, 99, 235, 0.15));
485
- border-color: rgba(59, 130, 246, 0.3);
315
+ .semiont-progress-bar__fill {
316
+ height: 100%;
317
+ background-color: var(--semiont-color-primary-500);
318
+ transition: width 0.3s ease;
486
319
  }
487
320
 
488
- [data-theme="dark"] .semiont-annotation-progress[data-type="reference"] .semiont-annotation-progress__message {
489
- background: linear-gradient(135deg, rgba(59, 130, 246, 0.25), rgba(37, 99, 235, 0.25));
490
- border-color: rgba(59, 130, 246, 0.5);
321
+ [data-theme="dark"] .semiont-progress-bar__fill {
322
+ background-color: var(--semiont-color-primary-400);
491
323
  }
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { useState, useCallback } from 'react';
4
+ import { assistProgressCopy, assistSubjectCopy, assistParamLabel } from '../../../lib/assist-progress-copy';
4
5
  import { useTranslations } from '../../../contexts/TranslationContext';
5
6
  import type { SemiontSession } from '@semiont/sdk';
6
7
  import type { Motivation, components } from '@semiont/core';
@@ -93,11 +94,10 @@ export function AssistSection({
93
94
  translations: {
94
95
  cancel: t('cancel'),
95
96
  inProgress: t('annotating'),
96
- complete: t('complete'),
97
- failed: t('failed'),
98
- paramsTitle: ta('paramsTitle'),
99
- processing: (label) => ta('processing', { label }),
100
97
  close: ta('close'),
98
+ message: assistProgressCopy(ta),
99
+ subject: assistSubjectCopy(ta),
100
+ paramLabel: assistParamLabel(ta),
101
101
  },
102
102
  }}
103
103
  form={
@@ -2,13 +2,13 @@
2
2
 
3
3
  import { useState, useEffect, type ReactNode } from 'react';
4
4
  import type { components } from '@semiont/core';
5
- import { AssistProgress, type AssistProgressProps } from '../../AssistProgress';
5
+ import { AssistProgress, type AssistProgressProps, type AssistDataType } from '../../AssistProgress';
6
6
 
7
7
  type JobProgress = components['schemas']['JobProgress'];
8
8
 
9
9
  export interface AssistShellProps {
10
- /** localStorage persist-key suffix and CSS `data-type` ('highlight' | 'comment' | 'assessment' | 'reference' | 'tag'). */
11
- assistType: string;
10
+ /** localStorage persist-key suffix and CSS `data-type`. */
11
+ assistType: AssistDataType;
12
12
  /** Collapsible section title (already translated). */
13
13
  title: string;
14
14
  isAssisting: boolean;
@@ -24,7 +24,7 @@ export interface AssistShellProps {
24
24
  * itself, so a caller that omitted this would render untranslated chrome —
25
25
  * the failure Lane A exists to make impossible.
26
26
  */
27
- progressProps: Omit<AssistProgressProps, 'progress' | 'dataType'>;
27
+ progressProps: Omit<AssistProgressProps, 'progress' | 'dataType' | 'ended'>;
28
28
  }
29
29
 
30
30
  /**
@@ -70,6 +70,14 @@ export function AssistShell({ assistType, title, isAssisting, progress, form, pr
70
70
  <AssistProgress
71
71
  progress={progress}
72
72
  dataType={assistType}
73
+ // `ended` is deliberately NOT in `progressProps` (it is Omit'd):
74
+ // the shell watches the job lifecycle, so a panel cannot get this
75
+ // wrong or forget it.
76
+ // D7: terminality is the OWNER's fact. `isAssisting` follows the
77
+ // job lifecycle (job:complete / job:fail); the widget must never
78
+ // infer "done" from a progress payload, which cannot tell it
79
+ // about a cancel or a crash after the last tick.
80
+ ended={!isAssisting}
73
81
  {...progressProps}
74
82
  {...(isAssisting ? { onDismiss: undefined } : {})}
75
83
  />
@@ -19,10 +19,6 @@
19
19
  color: var(--semiont-text-primary);
20
20
  }
21
21
 
22
- [data-theme="dark"] .semiont-collaboration-panel__title {
23
- color: var(--semiont-text-primary);
24
- }
25
-
26
22
  /* Sections */
27
23
  .semiont-collaboration-panel__section {
28
24
  display: flex;
@@ -93,10 +89,6 @@
93
89
  color: var(--semiont-text-tertiary);
94
90
  }
95
91
 
96
- [data-theme="dark"] .semiont-collaboration-panel__status-text {
97
- color: var(--semiont-text-tertiary);
98
- }
99
-
100
92
  .semiont-collaboration-panel__status-text[data-connected="true"] {
101
93
  color: var(--semiont-color-success-dark);
102
94
  }
@@ -110,10 +102,6 @@
110
102
  color: var(--semiont-text-tertiary);
111
103
  }
112
104
 
113
- [data-theme="dark"] .semiont-collaboration-panel__event-count {
114
- color: var(--semiont-text-tertiary);
115
- }
116
-
117
105
  /* Details */
118
106
  .semiont-collaboration-panel__details {
119
107
  display: flex;
@@ -133,10 +121,6 @@
133
121
  color: var(--semiont-text-primary);
134
122
  }
135
123
 
136
- [data-theme="dark"] .semiont-collaboration-panel__label {
137
- color: var(--semiont-text-primary);
138
- }
139
-
140
124
  /* Description */
141
125
  .semiont-collaboration-panel__description {
142
126
  margin: 0;
@@ -208,15 +192,56 @@
208
192
  color: var(--semiont-text-primary);
209
193
  }
210
194
 
211
- [data-theme="dark"] .semiont-collaboration-panel__username {
195
+ .semiont-collaboration-panel__user-status {
196
+ font-size: var(--semiont-text-xs);
197
+ color: var(--semiont-text-tertiary);
198
+ }
199
+
200
+ /* Collaborators roster — one row per software agent (INFERENCE-LIMITS-EXPOSURE P3a) */
201
+ .semiont-collaboration-panel__collaborator {
202
+ display: flex;
203
+ flex-direction: column;
204
+ gap: 0.125rem;
205
+ padding: 0.375rem 0;
206
+ font-size: var(--semiont-text-sm);
207
+ line-height: 1.4;
208
+ }
209
+
210
+ .semiont-collaboration-panel__collaborator + .semiont-collaboration-panel__collaborator {
211
+ border-top: 1px solid var(--semiont-border-secondary);
212
+ }
213
+
214
+ [data-theme="dark"] .semiont-collaboration-panel__collaborator + .semiont-collaboration-panel__collaborator {
215
+ border-top-color: var(--semiont-color-gray-700);
216
+ }
217
+
218
+ .semiont-collaboration-panel__collaborator-id {
219
+ display: flex;
220
+ gap: 0.375rem;
221
+ align-items: baseline;
212
222
  color: var(--semiont-text-primary);
213
223
  }
214
224
 
215
- .semiont-collaboration-panel__user-status {
225
+ /* The provider is context for the model, not a peer of it. */
226
+ .semiont-collaboration-panel__collaborator-provider {
216
227
  font-size: var(--semiont-text-xs);
217
- color: var(--semiont-text-tertiary);
228
+ color: var(--semiont-text-secondary);
229
+ text-transform: uppercase;
230
+ letter-spacing: 0.03em;
218
231
  }
219
232
 
220
- [data-theme="dark"] .semiont-collaboration-panel__user-status {
221
- color: var(--semiont-text-tertiary);
222
- }
233
+ .semiont-collaboration-panel__collaborator-model {
234
+ font-weight: var(--semiont-font-medium);
235
+ word-break: break-all;
236
+ }
237
+
238
+ .semiont-collaboration-panel__collaborator-jobs,
239
+ .semiont-collaboration-panel__collaborator-limits {
240
+ font-size: var(--semiont-text-xs);
241
+ color: var(--semiont-text-secondary);
242
+ }
243
+
244
+ /* Ceilings are figures — align them with the numeral treatment used elsewhere. */
245
+ .semiont-collaboration-panel__collaborator-limits {
246
+ font-variant-numeric: tabular-nums;
247
+ }