@cohesivesystems/presentation-react-shadcn 0.1.0-alpha.1

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 (262) hide show
  1. package/LICENSE +55 -0
  2. package/dist/document-workspace-surface-slot-renderers.d.ts +58 -0
  3. package/dist/document-workspace-surface-slot-renderers.d.ts.map +1 -0
  4. package/dist/document-workspace-surface-slot-renderers.js +206 -0
  5. package/dist/document-workspace-surface-slot-renderers.js.map +1 -0
  6. package/dist/index.d.ts +53 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +53 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/navigation-shell-frame-renderer-registry.d.ts +8 -0
  11. package/dist/navigation-shell-frame-renderer-registry.d.ts.map +1 -0
  12. package/dist/navigation-shell-frame-renderer-registry.js +2 -0
  13. package/dist/navigation-shell-frame-renderer-registry.js.map +1 -0
  14. package/dist/navigation-shell-slot-renderer-registry.d.ts +9 -0
  15. package/dist/navigation-shell-slot-renderer-registry.d.ts.map +1 -0
  16. package/dist/navigation-shell-slot-renderer-registry.js +2 -0
  17. package/dist/navigation-shell-slot-renderer-registry.js.map +1 -0
  18. package/dist/page-host-unavailable-renderer.d.ts +10 -0
  19. package/dist/page-host-unavailable-renderer.d.ts.map +1 -0
  20. package/dist/page-host-unavailable-renderer.js +27 -0
  21. package/dist/page-host-unavailable-renderer.js.map +1 -0
  22. package/dist/presentation-action-group.d.ts +99 -0
  23. package/dist/presentation-action-group.d.ts.map +1 -0
  24. package/dist/presentation-action-group.js +214 -0
  25. package/dist/presentation-action-group.js.map +1 -0
  26. package/dist/presentation-badge-target-interpreter.d.ts +26 -0
  27. package/dist/presentation-badge-target-interpreter.d.ts.map +1 -0
  28. package/dist/presentation-badge-target-interpreter.js +17 -0
  29. package/dist/presentation-badge-target-interpreter.js.map +1 -0
  30. package/dist/presentation-component-groups.d.ts +968 -0
  31. package/dist/presentation-component-groups.d.ts.map +1 -0
  32. package/dist/presentation-component-groups.js +505 -0
  33. package/dist/presentation-component-groups.js.map +1 -0
  34. package/dist/presentation-component-system-diagnostics.d.ts +27 -0
  35. package/dist/presentation-component-system-diagnostics.d.ts.map +1 -0
  36. package/dist/presentation-component-system-diagnostics.js +399 -0
  37. package/dist/presentation-component-system-diagnostics.js.map +1 -0
  38. package/dist/presentation-component-system.d.ts +31 -0
  39. package/dist/presentation-component-system.d.ts.map +1 -0
  40. package/dist/presentation-component-system.js +61 -0
  41. package/dist/presentation-component-system.js.map +1 -0
  42. package/dist/presentation-icon-diagnostics.d.ts +12 -0
  43. package/dist/presentation-icon-diagnostics.d.ts.map +1 -0
  44. package/dist/presentation-icon-diagnostics.js +17 -0
  45. package/dist/presentation-icon-diagnostics.js.map +1 -0
  46. package/dist/presentation-icon-registry.d.ts +28 -0
  47. package/dist/presentation-icon-registry.d.ts.map +1 -0
  48. package/dist/presentation-icon-registry.js +80 -0
  49. package/dist/presentation-icon-registry.js.map +1 -0
  50. package/dist/presentation-projection-trace-panel.d.ts +10 -0
  51. package/dist/presentation-projection-trace-panel.d.ts.map +1 -0
  52. package/dist/presentation-projection-trace-panel.js +48 -0
  53. package/dist/presentation-projection-trace-panel.js.map +1 -0
  54. package/dist/presentation-routed-surface-host.d.ts +19 -0
  55. package/dist/presentation-routed-surface-host.d.ts.map +1 -0
  56. package/dist/presentation-routed-surface-host.js +12 -0
  57. package/dist/presentation-routed-surface-host.js.map +1 -0
  58. package/dist/presentation-shadcn-component-system.d.ts +22 -0
  59. package/dist/presentation-shadcn-component-system.d.ts.map +1 -0
  60. package/dist/presentation-shadcn-component-system.js +2 -0
  61. package/dist/presentation-shadcn-component-system.js.map +1 -0
  62. package/dist/presentation-standard-renderers.d.ts +168 -0
  63. package/dist/presentation-standard-renderers.d.ts.map +1 -0
  64. package/dist/presentation-standard-renderers.js +440 -0
  65. package/dist/presentation-standard-renderers.js.map +1 -0
  66. package/dist/presentation-surface-renderer.d.ts +23 -0
  67. package/dist/presentation-surface-renderer.d.ts.map +1 -0
  68. package/dist/presentation-surface-renderer.js +119 -0
  69. package/dist/presentation-surface-renderer.js.map +1 -0
  70. package/dist/presentation-value-renderers.d.ts +10 -0
  71. package/dist/presentation-value-renderers.d.ts.map +1 -0
  72. package/dist/presentation-value-renderers.js +14 -0
  73. package/dist/presentation-value-renderers.js.map +1 -0
  74. package/dist/process-task-icons.d.ts +49 -0
  75. package/dist/process-task-icons.d.ts.map +1 -0
  76. package/dist/process-task-icons.js +154 -0
  77. package/dist/process-task-icons.js.map +1 -0
  78. package/dist/projected-activity-state.d.ts +17 -0
  79. package/dist/projected-activity-state.d.ts.map +1 -0
  80. package/dist/projected-activity-state.js +22 -0
  81. package/dist/projected-activity-state.js.map +1 -0
  82. package/dist/projected-collection-action-runtime-diagnostics.d.ts +4 -0
  83. package/dist/projected-collection-action-runtime-diagnostics.d.ts.map +1 -0
  84. package/dist/projected-collection-action-runtime-diagnostics.js +9 -0
  85. package/dist/projected-collection-action-runtime-diagnostics.js.map +1 -0
  86. package/dist/projected-collection-view.d.ts +90 -0
  87. package/dist/projected-collection-view.d.ts.map +1 -0
  88. package/dist/projected-collection-view.js +532 -0
  89. package/dist/projected-collection-view.js.map +1 -0
  90. package/dist/projected-document-action-status-notices.d.ts +15 -0
  91. package/dist/projected-document-action-status-notices.d.ts.map +1 -0
  92. package/dist/projected-document-action-status-notices.js +33 -0
  93. package/dist/projected-document-action-status-notices.js.map +1 -0
  94. package/dist/projected-document-badges.d.ts +24 -0
  95. package/dist/projected-document-badges.d.ts.map +1 -0
  96. package/dist/projected-document-badges.js +53 -0
  97. package/dist/projected-document-badges.js.map +1 -0
  98. package/dist/projected-document-editor-surface.d.ts +46 -0
  99. package/dist/projected-document-editor-surface.d.ts.map +1 -0
  100. package/dist/projected-document-editor-surface.js +399 -0
  101. package/dist/projected-document-editor-surface.js.map +1 -0
  102. package/dist/projected-document-workspace-notices.d.ts +24 -0
  103. package/dist/projected-document-workspace-notices.d.ts.map +1 -0
  104. package/dist/projected-document-workspace-notices.js +14 -0
  105. package/dist/projected-document-workspace-notices.js.map +1 -0
  106. package/dist/projected-document-workspace-prompt-child-view-registry.d.ts +25 -0
  107. package/dist/projected-document-workspace-prompt-child-view-registry.d.ts.map +1 -0
  108. package/dist/projected-document-workspace-prompt-child-view-registry.js +41 -0
  109. package/dist/projected-document-workspace-prompt-child-view-registry.js.map +1 -0
  110. package/dist/projected-document-workspace-prompt-child-view-renderers.d.ts +32 -0
  111. package/dist/projected-document-workspace-prompt-child-view-renderers.d.ts.map +1 -0
  112. package/dist/projected-document-workspace-prompt-child-view-renderers.js +77 -0
  113. package/dist/projected-document-workspace-prompt-child-view-renderers.js.map +1 -0
  114. package/dist/projected-document-workspace-shell.d.ts +100 -0
  115. package/dist/projected-document-workspace-shell.d.ts.map +1 -0
  116. package/dist/projected-document-workspace-shell.js +153 -0
  117. package/dist/projected-document-workspace-shell.js.map +1 -0
  118. package/dist/projected-document-workspace.d.ts +39 -0
  119. package/dist/projected-document-workspace.d.ts.map +1 -0
  120. package/dist/projected-document-workspace.js +63 -0
  121. package/dist/projected-document-workspace.js.map +1 -0
  122. package/dist/projected-field-value-rendering.d.ts +94 -0
  123. package/dist/projected-field-value-rendering.d.ts.map +1 -0
  124. package/dist/projected-field-value-rendering.js +377 -0
  125. package/dist/projected-field-value-rendering.js.map +1 -0
  126. package/dist/projected-inline-list.d.ts +20 -0
  127. package/dist/projected-inline-list.d.ts.map +1 -0
  128. package/dist/projected-inline-list.js +149 -0
  129. package/dist/projected-inline-list.js.map +1 -0
  130. package/dist/projected-input-form.d.ts +143 -0
  131. package/dist/projected-input-form.d.ts.map +1 -0
  132. package/dist/projected-input-form.js +612 -0
  133. package/dist/projected-input-form.js.map +1 -0
  134. package/dist/projected-metric-dashboard.d.ts +26 -0
  135. package/dist/projected-metric-dashboard.d.ts.map +1 -0
  136. package/dist/projected-metric-dashboard.js +20 -0
  137. package/dist/projected-metric-dashboard.js.map +1 -0
  138. package/dist/projected-metric-strip.d.ts +20 -0
  139. package/dist/projected-metric-strip.d.ts.map +1 -0
  140. package/dist/projected-metric-strip.js +131 -0
  141. package/dist/projected-metric-strip.js.map +1 -0
  142. package/dist/projected-navigation-shell-view-host.d.ts +34 -0
  143. package/dist/projected-navigation-shell-view-host.d.ts.map +1 -0
  144. package/dist/projected-navigation-shell-view-host.js +75 -0
  145. package/dist/projected-navigation-shell-view-host.js.map +1 -0
  146. package/dist/projected-navigation-shell.d.ts +33 -0
  147. package/dist/projected-navigation-shell.d.ts.map +1 -0
  148. package/dist/projected-navigation-shell.js +112 -0
  149. package/dist/projected-navigation-shell.js.map +1 -0
  150. package/dist/projected-presentation-badges.d.ts +34 -0
  151. package/dist/projected-presentation-badges.d.ts.map +1 -0
  152. package/dist/projected-presentation-badges.js +22 -0
  153. package/dist/projected-presentation-badges.js.map +1 -0
  154. package/dist/projected-presentation-diagnostics.d.ts +10 -0
  155. package/dist/projected-presentation-diagnostics.d.ts.map +1 -0
  156. package/dist/projected-presentation-diagnostics.js +40 -0
  157. package/dist/projected-presentation-diagnostics.js.map +1 -0
  158. package/dist/projected-presentation-flow-layer.d.ts +33 -0
  159. package/dist/projected-presentation-flow-layer.d.ts.map +1 -0
  160. package/dist/projected-presentation-flow-layer.js +71 -0
  161. package/dist/projected-presentation-flow-layer.js.map +1 -0
  162. package/dist/projected-process-task-notices.d.ts +37 -0
  163. package/dist/projected-process-task-notices.d.ts.map +1 -0
  164. package/dist/projected-process-task-notices.js +225 -0
  165. package/dist/projected-process-task-notices.js.map +1 -0
  166. package/dist/projected-prompt-child-view-renderer.d.ts +101 -0
  167. package/dist/projected-prompt-child-view-renderer.d.ts.map +1 -0
  168. package/dist/projected-prompt-child-view-renderer.js +442 -0
  169. package/dist/projected-prompt-child-view-renderer.js.map +1 -0
  170. package/dist/projected-prompt-document-preview.d.ts +39 -0
  171. package/dist/projected-prompt-document-preview.d.ts.map +1 -0
  172. package/dist/projected-prompt-document-preview.js +50 -0
  173. package/dist/projected-prompt-document-preview.js.map +1 -0
  174. package/dist/projected-prompt-view.d.ts +35 -0
  175. package/dist/projected-prompt-view.d.ts.map +1 -0
  176. package/dist/projected-prompt-view.js +292 -0
  177. package/dist/projected-prompt-view.js.map +1 -0
  178. package/dist/projected-query-form.d.ts +56 -0
  179. package/dist/projected-query-form.d.ts.map +1 -0
  180. package/dist/projected-query-form.js +100 -0
  181. package/dist/projected-query-form.js.map +1 -0
  182. package/dist/projected-record-details.d.ts +20 -0
  183. package/dist/projected-record-details.d.ts.map +1 -0
  184. package/dist/projected-record-details.js +60 -0
  185. package/dist/projected-record-details.js.map +1 -0
  186. package/dist/projected-routed-surface-runtime.d.ts +86 -0
  187. package/dist/projected-routed-surface-runtime.d.ts.map +1 -0
  188. package/dist/projected-routed-surface-runtime.js +332 -0
  189. package/dist/projected-routed-surface-runtime.js.map +1 -0
  190. package/dist/projected-tabs-view.d.ts +21 -0
  191. package/dist/projected-tabs-view.d.ts.map +1 -0
  192. package/dist/projected-tabs-view.js +140 -0
  193. package/dist/projected-tabs-view.js.map +1 -0
  194. package/dist/projected-view-chrome.d.ts +15 -0
  195. package/dist/projected-view-chrome.d.ts.map +1 -0
  196. package/dist/projected-view-chrome.js +67 -0
  197. package/dist/projected-view-chrome.js.map +1 -0
  198. package/dist/projected-view-surface.d.ts +34 -0
  199. package/dist/projected-view-surface.d.ts.map +1 -0
  200. package/dist/projected-view-surface.js +40 -0
  201. package/dist/projected-view-surface.js.map +1 -0
  202. package/dist/standard-collection-chrome-slot-renderers.d.ts +26 -0
  203. package/dist/standard-collection-chrome-slot-renderers.d.ts.map +1 -0
  204. package/dist/standard-collection-chrome-slot-renderers.js +250 -0
  205. package/dist/standard-collection-chrome-slot-renderers.js.map +1 -0
  206. package/dist/standard-view-chrome-slot-renderers.d.ts +57 -0
  207. package/dist/standard-view-chrome-slot-renderers.d.ts.map +1 -0
  208. package/dist/standard-view-chrome-slot-renderers.js +614 -0
  209. package/dist/standard-view-chrome-slot-renderers.js.map +1 -0
  210. package/package.json +68 -0
  211. package/src/document-workspace-surface-slot-renderers.tsx +395 -0
  212. package/src/index.ts +53 -0
  213. package/src/navigation-shell-frame-renderer-registry.ts +29 -0
  214. package/src/navigation-shell-slot-renderer-registry.ts +46 -0
  215. package/src/page-host-unavailable-renderer.tsx +79 -0
  216. package/src/presentation-action-group.tsx +475 -0
  217. package/src/presentation-badge-target-interpreter.ts +54 -0
  218. package/src/presentation-component-groups.ts +2505 -0
  219. package/src/presentation-component-system-diagnostics.ts +848 -0
  220. package/src/presentation-component-system.ts +365 -0
  221. package/src/presentation-icon-diagnostics.ts +53 -0
  222. package/src/presentation-icon-registry.tsx +181 -0
  223. package/src/presentation-projection-trace-panel.tsx +140 -0
  224. package/src/presentation-routed-surface-host.tsx +48 -0
  225. package/src/presentation-shadcn-component-system.ts +102 -0
  226. package/src/presentation-standard-renderers.tsx +1290 -0
  227. package/src/presentation-surface-renderer.tsx +263 -0
  228. package/src/presentation-value-renderers.tsx +40 -0
  229. package/src/process-task-icons.tsx +258 -0
  230. package/src/projected-activity-state.tsx +63 -0
  231. package/src/projected-collection-action-runtime-diagnostics.ts +22 -0
  232. package/src/projected-collection-view.tsx +1273 -0
  233. package/src/projected-document-action-status-notices.tsx +66 -0
  234. package/src/projected-document-badges.tsx +134 -0
  235. package/src/projected-document-editor-surface.tsx +808 -0
  236. package/src/projected-document-workspace-notices.tsx +77 -0
  237. package/src/projected-document-workspace-prompt-child-view-registry.ts +99 -0
  238. package/src/projected-document-workspace-prompt-child-view-renderers.tsx +205 -0
  239. package/src/projected-document-workspace-shell.tsx +427 -0
  240. package/src/projected-document-workspace.tsx +216 -0
  241. package/src/projected-field-value-rendering.tsx +704 -0
  242. package/src/projected-inline-list.tsx +434 -0
  243. package/src/projected-input-form.tsx +1218 -0
  244. package/src/projected-metric-dashboard.tsx +106 -0
  245. package/src/projected-metric-strip.tsx +244 -0
  246. package/src/projected-navigation-shell-view-host.tsx +177 -0
  247. package/src/projected-navigation-shell.tsx +219 -0
  248. package/src/projected-presentation-badges.tsx +95 -0
  249. package/src/projected-presentation-diagnostics.tsx +120 -0
  250. package/src/projected-presentation-flow-layer.tsx +186 -0
  251. package/src/projected-process-task-notices.tsx +501 -0
  252. package/src/projected-prompt-child-view-renderer.tsx +698 -0
  253. package/src/projected-prompt-document-preview.tsx +197 -0
  254. package/src/projected-prompt-view.tsx +592 -0
  255. package/src/projected-query-form.tsx +286 -0
  256. package/src/projected-record-details.tsx +133 -0
  257. package/src/projected-routed-surface-runtime.tsx +713 -0
  258. package/src/projected-tabs-view.tsx +308 -0
  259. package/src/projected-view-chrome.tsx +148 -0
  260. package/src/projected-view-surface.tsx +131 -0
  261. package/src/standard-collection-chrome-slot-renderers.tsx +391 -0
  262. package/src/standard-view-chrome-slot-renderers.tsx +1064 -0
@@ -0,0 +1,77 @@
1
+ import type { PresentationDesignSystem } from '@cohesivesystems/presentation-tailwind'
2
+ import type {
3
+ DocumentProfileProjection,
4
+ ProcessTask,
5
+ ProcessTaskSelector,
6
+ ProcessTaskSelectorDefinition,
7
+ ProjectedDocumentActionStatusMap,
8
+ } from '@cohesivesystems/presentation-core'
9
+ import type {
10
+ PresentationShadcnComponentSystem as PresentationComponentSystem,
11
+ } from './presentation-shadcn-component-system'
12
+ import {
13
+ ProjectedDocumentActionStatusNotices,
14
+ } from './projected-document-action-status-notices'
15
+ import {
16
+ ProjectedProcessTaskNotices,
17
+ type ProjectedProcessTaskNoticeRenderer,
18
+ } from './projected-process-task-notices'
19
+
20
+ export interface ProjectedDocumentWorkspaceNoticesProps<TContext> {
21
+ readonly actionStatuses: ProjectedDocumentActionStatusMap
22
+ readonly componentSystem: PresentationComponentSystem
23
+ readonly context: TContext
24
+ readonly designSystem: PresentationDesignSystem
25
+ readonly findActiveTask?: (selector: ProcessTaskSelector) => ProcessTask | null
26
+ readonly profile: Pick<
27
+ DocumentProfileProjection,
28
+ 'ActionStatusNotices' | 'ProcessTaskNotices' | 'ProcessTaskSelectors'
29
+ > | null
30
+ readonly projectSelector: (
31
+ selector: ProcessTaskSelectorDefinition | null | undefined,
32
+ context: TContext,
33
+ ) => ProcessTaskSelector | null
34
+ readonly region?: string
35
+ readonly renderProcessTaskNotice?: ProjectedProcessTaskNoticeRenderer
36
+ }
37
+
38
+ /**
39
+ * Projects all document-profile notices for a workspace chrome region.
40
+ *
41
+ * Action status notices are rendered by the shared presentation layer. Process
42
+ * task notices resolve from IR selectors here, then delegate their concrete
43
+ * visual interpretation to the host adapter.
44
+ */
45
+ export function ProjectedDocumentWorkspaceNotices<TContext>({
46
+ actionStatuses,
47
+ componentSystem,
48
+ context,
49
+ designSystem,
50
+ findActiveTask,
51
+ profile,
52
+ projectSelector,
53
+ region,
54
+ renderProcessTaskNotice,
55
+ }: ProjectedDocumentWorkspaceNoticesProps<TContext>) {
56
+ return (
57
+ <>
58
+ <ProjectedDocumentActionStatusNotices
59
+ actionStatuses={actionStatuses}
60
+ profile={profile}
61
+ region={region}
62
+ />
63
+ {findActiveTask ? (
64
+ <ProjectedProcessTaskNotices
65
+ componentSystem={componentSystem}
66
+ context={context}
67
+ designSystem={designSystem}
68
+ findActiveTask={findActiveTask}
69
+ profile={profile}
70
+ projectSelector={projectSelector}
71
+ region={region}
72
+ renderNotice={renderProcessTaskNotice}
73
+ />
74
+ ) : null}
75
+ </>
76
+ )
77
+ }
@@ -0,0 +1,99 @@
1
+ import { createElement } from 'react'
2
+
3
+ import type {
4
+ DocumentWorkspaceProjectionRendererRegistry,
5
+ } from '@cohesivesystems/presentation-react'
6
+ import type {
7
+ PresentationShadcnComponentSystem as PresentationComponentSystem,
8
+ } from './presentation-shadcn-component-system'
9
+ import type {
10
+ PresentationDesignSystem,
11
+ } from '@cohesivesystems/presentation-tailwind'
12
+ import type {
13
+ ProjectedDocumentActionStatusMap,
14
+ } from '@cohesivesystems/presentation-core'
15
+ import {
16
+ mergeProjectedPromptChildViewRendererRegistries,
17
+ promptChildViewSemanticRoles,
18
+ type ProjectedPromptChildViewRenderer,
19
+ type ProjectedPromptChildViewRendererRegistry,
20
+ } from './projected-prompt-child-view-renderer'
21
+ import {
22
+ ProjectedDocumentWorkspacePromptPreviewProjection,
23
+ ProjectedJsonDocumentDiffProjection,
24
+ type ProjectedDocumentWorkspacePromptPreviewRenderContextOptions,
25
+ } from './projected-document-workspace-prompt-child-view-renderers'
26
+ import {
27
+ promptChildViewComponentRoles,
28
+ } from '@cohesivesystems/presentation-contracts'
29
+
30
+ export type {
31
+ ProjectedDocumentWorkspacePromptPreviewRenderContextOptions,
32
+ } from './projected-document-workspace-prompt-child-view-renderers'
33
+
34
+ export interface CreateProjectedDocumentWorkspacePromptChildViewRegistryOptions<TContext> {
35
+ readonly actionStatuses: ProjectedDocumentActionStatusMap
36
+ readonly createPromptPreviewRenderContext: (
37
+ context: ProjectedDocumentWorkspacePromptPreviewRenderContextOptions,
38
+ ) => TContext
39
+ readonly projectionRenderers: DocumentWorkspaceProjectionRendererRegistry<
40
+ TContext,
41
+ PresentationComponentSystem,
42
+ PresentationDesignSystem
43
+ >
44
+ readonly registries?: readonly ProjectedPromptChildViewRendererRegistry<TContext>[]
45
+ readonly renderJsonDocumentDiff?: ProjectedPromptChildViewRenderer<TContext>
46
+ readonly renderPromptDocumentPreview?: ProjectedPromptChildViewRenderer<TContext>
47
+ }
48
+
49
+ /**
50
+ * Creates the standard prompt child-view registry for document workspaces.
51
+ *
52
+ * The backend declares semantic child views such as JSON document diffs and
53
+ * prompt document previews. This helper binds those roles to reusable
54
+ * document-workspace renderers while leaving the concrete projection render
55
+ * context to the app adapter.
56
+ */
57
+ export function createProjectedDocumentWorkspacePromptChildViewRegistry<TContext>({
58
+ actionStatuses,
59
+ createPromptPreviewRenderContext,
60
+ projectionRenderers,
61
+ registries = [],
62
+ renderJsonDocumentDiff,
63
+ renderPromptDocumentPreview,
64
+ }: CreateProjectedDocumentWorkspacePromptChildViewRegistryOptions<TContext>): ProjectedPromptChildViewRendererRegistry<TContext> {
65
+ const jsonDocumentDiffRenderer =
66
+ renderJsonDocumentDiff ?? ((context) =>
67
+ createElement(ProjectedJsonDocumentDiffProjection, {
68
+ componentSystem: context.componentSystem,
69
+ dataSourceResolver: context.dataSourceResolver,
70
+ view: context.view,
71
+ }))
72
+ const promptDocumentPreviewRenderer =
73
+ renderPromptDocumentPreview ?? ((context) =>
74
+ createElement(ProjectedDocumentWorkspacePromptPreviewProjection<TContext>, {
75
+ actionStatuses,
76
+ componentSystem: context.componentSystem,
77
+ createProjectionRenderContext: createPromptPreviewRenderContext,
78
+ dataSourceResolver: context.dataSourceResolver,
79
+ designSystem: context.designSystem,
80
+ projectionRenderers,
81
+ promptView: context.promptView,
82
+ view: context.view,
83
+ viewId: context.viewId,
84
+ }))
85
+
86
+ return mergeProjectedPromptChildViewRendererRegistries(
87
+ {
88
+ byComponentRole: {
89
+ [promptChildViewComponentRoles.jsonDocumentDiff]: jsonDocumentDiffRenderer,
90
+ [promptChildViewComponentRoles.promptDocumentPreview]: promptDocumentPreviewRenderer,
91
+ },
92
+ bySemanticRole: {
93
+ [promptChildViewSemanticRoles.jsonDocumentDiff]: jsonDocumentDiffRenderer,
94
+ [promptChildViewSemanticRoles.promptDocumentPreview]: promptDocumentPreviewRenderer,
95
+ },
96
+ },
97
+ ...registries,
98
+ )
99
+ }
@@ -0,0 +1,205 @@
1
+ import type {
2
+ DocumentWorkspaceProjectionRendererRegistry,
3
+ } from '@cohesivesystems/presentation-react'
4
+ import type {
5
+ PresentationShadcnComponentSystem as PresentationComponentSystem,
6
+ } from './presentation-shadcn-component-system'
7
+ import type {
8
+ PresentationDesignSystem,
9
+ } from '@cohesivesystems/presentation-tailwind'
10
+ import {
11
+ findPromptDocumentPreviewRegionId,
12
+ findPromptDocumentPreviewStatusRegionId,
13
+ getErrorMessage,
14
+ readObjectProperty,
15
+ resolvePromptDocumentPreviewPath,
16
+ resolvePromptDocumentPreviewText,
17
+ resolvePromptStatusMessages,
18
+ resolvePromptStatusMessageText,
19
+ type PresentationDataSourceResolver,
20
+ type ProjectedDocumentActionStatusMap,
21
+ type ProjectedPromptDocumentPreviewData,
22
+ type ViewDefinition,
23
+ } from '@cohesivesystems/presentation-core'
24
+ import {
25
+ ProjectedStatusBlock,
26
+ } from './projected-activity-state'
27
+ import {
28
+ ProjectedPromptDocumentPreview,
29
+ } from './projected-prompt-document-preview'
30
+
31
+ export interface ProjectedDocumentWorkspacePromptPreviewRenderContextOptions {
32
+ readonly editorPath: string
33
+ readonly editorText: string
34
+ readonly isReadOnly: boolean
35
+ readonly previewData: ProjectedPromptDocumentPreviewData
36
+ readonly view: ViewDefinition
37
+ }
38
+
39
+ interface ProjectedJsonDocumentDiffProjectionProps {
40
+ readonly componentSystem: PresentationComponentSystem
41
+ readonly dataSourceResolver: PresentationDataSourceResolver
42
+ readonly view: ViewDefinition
43
+ }
44
+
45
+ interface JsonDocumentDiffReviewData {
46
+ readonly error?: string | null
47
+ readonly modified?: string | null
48
+ readonly original?: string | null
49
+ readonly path?: string | null
50
+ readonly title?: string | null
51
+ }
52
+
53
+ interface ProjectedDocumentWorkspacePromptPreviewProjectionProps<TContext> {
54
+ readonly actionStatuses: ProjectedDocumentActionStatusMap
55
+ readonly componentSystem: PresentationComponentSystem
56
+ readonly createProjectionRenderContext: (
57
+ context: ProjectedDocumentWorkspacePromptPreviewRenderContextOptions,
58
+ ) => TContext
59
+ readonly dataSourceResolver: PresentationDataSourceResolver
60
+ readonly designSystem: PresentationDesignSystem
61
+ readonly projectionRenderers: DocumentWorkspaceProjectionRendererRegistry<
62
+ TContext,
63
+ PresentationComponentSystem,
64
+ PresentationDesignSystem
65
+ >
66
+ readonly promptView: ViewDefinition
67
+ readonly statusRegionId?: string | null
68
+ readonly view: ViewDefinition
69
+ readonly viewId: string
70
+ }
71
+
72
+ export function ProjectedJsonDocumentDiffProjection({
73
+ componentSystem,
74
+ dataSourceResolver,
75
+ view,
76
+ }: ProjectedJsonDocumentDiffProjectionProps) {
77
+ const state = dataSourceResolver.resolveViewPrimary<JsonDocumentDiffReviewData>(view)
78
+ const data = state?.data
79
+ if (!data || typeof data !== 'object') {
80
+ return <ProjectedStatusBlock label="JSON diff data is not available." />
81
+ }
82
+
83
+ return componentSystem.documentWorkspaces.JsonDocumentDiff({
84
+ error: readString(data, 'error') ?? (state.error ? getErrorMessage(state.error) : null),
85
+ modified: readString(data, 'modified') ?? '',
86
+ original: readString(data, 'original') ?? '',
87
+ path: readString(data, 'path') ?? 'document.json',
88
+ title: readString(data, 'title') ?? view.Name,
89
+ viewId: view.Id,
90
+ })
91
+ }
92
+
93
+ export function ProjectedDocumentWorkspacePromptPreviewProjection<TContext>({
94
+ actionStatuses,
95
+ createProjectionRenderContext,
96
+ componentSystem,
97
+ dataSourceResolver,
98
+ designSystem,
99
+ projectionRenderers,
100
+ promptView,
101
+ statusRegionId,
102
+ view,
103
+ viewId,
104
+ }: ProjectedDocumentWorkspacePromptPreviewProjectionProps<TContext>) {
105
+ const previewDefinition = view.PromptDocumentPreview
106
+ const previewRegionId = findPromptDocumentPreviewRegionId(promptView, view.Id) ?? view.Id
107
+ const previewMessages = resolvePromptStatusMessages({
108
+ actionStatuses,
109
+ dataSourceResolver,
110
+ region: previewRegionId,
111
+ view: promptView,
112
+ })
113
+ const previewState = resolvePromptDocumentPreviewState({
114
+ dataSourceResolver,
115
+ view,
116
+ })
117
+ const preview = readPromptDocumentPreviewData({
118
+ state: previewState,
119
+ })
120
+
121
+ if (!preview) {
122
+ if (previewState?.error) {
123
+ return (
124
+ <ProjectedStatusBlock
125
+ label={getErrorMessage(previewState.error)}
126
+ tone="error"
127
+ />
128
+ )
129
+ }
130
+
131
+ const pendingMessage = previewMessages[0]
132
+ return pendingMessage ? (
133
+ <ProjectedStatusBlock
134
+ label={pendingMessage.label}
135
+ tone={pendingMessage.tone}
136
+ />
137
+ ) : null
138
+ }
139
+
140
+ const previewError = previewMessages.find((message) => message.tone === 'error')?.label ?? null
141
+ const resolvedStatusRegionId =
142
+ statusRegionId ?? findPromptDocumentPreviewStatusRegionId(promptView, view.Id)
143
+ const statusLabel = resolvedStatusRegionId
144
+ ? resolvePromptStatusMessageText({
145
+ actionStatuses,
146
+ dataSourceResolver,
147
+ region: resolvedStatusRegionId,
148
+ view: promptView,
149
+ })
150
+ : null
151
+ const previewText = resolvePromptDocumentPreviewText(previewDefinition, preview)
152
+ const previewRenderContext = createProjectionRenderContext({
153
+ editorPath: resolvePromptDocumentPreviewPath(previewDefinition, preview),
154
+ editorText: previewText,
155
+ isReadOnly: previewDefinition?.IsReadOnly ?? true,
156
+ previewData: preview,
157
+ view,
158
+ })
159
+
160
+ return (
161
+ <ProjectedPromptDocumentPreview
162
+ componentSystem={componentSystem}
163
+ designSystem={designSystem}
164
+ definition={previewDefinition}
165
+ error={previewError}
166
+ fallback={<ProjectedStatusBlock label="Document preview workspace is not available." />}
167
+ previewData={preview}
168
+ projectionRenderContext={previewRenderContext}
169
+ projectionRenderers={projectionRenderers}
170
+ renderUnavailableProjection={() => (
171
+ <ProjectedStatusBlock label="This preview view is not available." />
172
+ )}
173
+ statusLabel={statusLabel ?? undefined}
174
+ viewId={viewId}
175
+ />
176
+ )
177
+ }
178
+
179
+ function readPromptDocumentPreviewData({
180
+ state,
181
+ }: {
182
+ readonly state: ReturnType<typeof resolvePromptDocumentPreviewState>
183
+ }) {
184
+ return state?.data ?? null
185
+ }
186
+
187
+ function resolvePromptDocumentPreviewState({
188
+ dataSourceResolver,
189
+ view,
190
+ }: {
191
+ readonly dataSourceResolver: PresentationDataSourceResolver
192
+ readonly view: ViewDefinition
193
+ }) {
194
+ const dataSourceId = view.PromptDocumentPreview?.DataSourceId
195
+ if (dataSourceId) {
196
+ return dataSourceResolver.resolve<ProjectedPromptDocumentPreviewData>(dataSourceId)
197
+ }
198
+
199
+ return dataSourceResolver.resolveViewPrimary<ProjectedPromptDocumentPreviewData>(view)
200
+ }
201
+
202
+ function readString(source: object, key: string) {
203
+ const value = readObjectProperty(source, key)
204
+ return typeof value === 'string' ? value : null
205
+ }