@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,292 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment, useEffect, useMemo } from 'react';
3
+ import { findPresentationAction, getPresentationViewProjectedActionPlacements, isPresentationViewFetching, isViewChromeSlotKind, isViewChromeSlotPlacementValue, promptChromeIconIds, resolvePresentationViewDataSourceIds, } from '@cohesivesystems/presentation-core';
4
+ import { PresentationActionGroup, } from './presentation-action-group.js';
5
+ import { renderPresentationIcon, } from './presentation-icon-registry.js';
6
+ import { projectPresentationIconDiagnostics, } from './presentation-icon-diagnostics.js';
7
+ import { useRegisterPresentationProjectionDiagnostics, } from '@cohesivesystems/presentation-react';
8
+ import { ProjectedViewChrome, resolveViewChromeSlotPlacement, } from './projected-view-chrome.js';
9
+ import { viewChromeSlotKinds, viewChromeSlotPlacements, viewRegionKinds, } from '@cohesivesystems/presentation-contracts';
10
+ export function ProjectedPromptView({ actionGroupOptions, actionRegionId = 'footer', className, componentSystem, contentClassName, context, dataSourceResolver, designSystem, description, module, regionRenderers, renderChromeSlot, renderRegion, renderView, title, view, }) {
11
+ const titleId = `${toDomId(view.Id)}-title`;
12
+ const ActionButton = componentSystem.actions.ActionButton;
13
+ const layoutClasses = resolvePromptLayoutClasses(view, dataSourceResolver);
14
+ const bodyRegions = view.Regions.filter((region) => !isActionRegion(region, actionRegionId));
15
+ const actionView = {
16
+ ...view,
17
+ Actions: getPresentationViewProjectedActionPlacements(view)
18
+ .filter((action) => action.Region === actionRegionId),
19
+ Chrome: null,
20
+ };
21
+ const hasFooterActionChrome = hasActionChromeSlotAtPlacement(view, viewChromeSlotPlacements.footer);
22
+ const hasDescriptionStatusChrome = Boolean(renderChromeSlot) &&
23
+ hasStatusChromeSlotAtPlacement(view, viewChromeSlotPlacements.beforeContent);
24
+ const dismissAction = resolvePromptDismissAction({
25
+ actionGroupOptions,
26
+ context,
27
+ dataSourceResolver,
28
+ module,
29
+ view,
30
+ });
31
+ const promptIconDiagnostics = useMemo(() => projectPresentationIconDiagnostics({
32
+ icons: view.PromptDismiss?.ShowCloseButton
33
+ ? [{
34
+ icon: promptChromeIconIds.close,
35
+ id: `${view.Id}:close`,
36
+ kind: 'prompt-chrome-icon',
37
+ label: 'Close prompt',
38
+ }]
39
+ : [],
40
+ module,
41
+ source: `projected-prompt-icons:${view.Id}`,
42
+ surfaceId: view.Id,
43
+ surfaceName: view.Name,
44
+ }), [
45
+ module,
46
+ view.Id,
47
+ view.Name,
48
+ view.PromptDismiss?.ShowCloseButton,
49
+ ]);
50
+ useRegisterPresentationProjectionDiagnostics(`projected-prompt-icons:${view.Id}`, promptIconDiagnostics);
51
+ useEffect(() => {
52
+ if (!view.PromptDismiss?.DismissOnEscape ||
53
+ !dismissAction ||
54
+ dismissAction.isHidden ||
55
+ !dismissAction.canDismiss) {
56
+ return;
57
+ }
58
+ const executeDismiss = dismissAction.execute;
59
+ function handleKeyDown(event) {
60
+ if (event.key !== 'Escape') {
61
+ return;
62
+ }
63
+ event.preventDefault();
64
+ executeDismiss();
65
+ }
66
+ window.addEventListener('keydown', handleKeyDown);
67
+ return () => window.removeEventListener('keydown', handleKeyDown);
68
+ }, [dismissAction, view.PromptDismiss?.DismissOnEscape]);
69
+ function handleBackdropMouseDown(event) {
70
+ if (event.target !== event.currentTarget ||
71
+ !view.PromptDismiss?.DismissOnBackdrop ||
72
+ !dismissAction ||
73
+ dismissAction.isHidden ||
74
+ !dismissAction.canDismiss) {
75
+ return;
76
+ }
77
+ event.preventDefault();
78
+ dismissAction.execute();
79
+ }
80
+ const renderPromptChromeSlot = (slot, chromeView) => {
81
+ if (isViewChromeSlotKind(slot, viewChromeSlotKinds.actions)) {
82
+ return renderPromptActionGroup({
83
+ actionGroupOptions,
84
+ actions: slot.Actions.length > 0 ? slot.Actions : actionView.Actions,
85
+ componentSystem,
86
+ context,
87
+ dataSourceResolver,
88
+ designSystem,
89
+ module,
90
+ view,
91
+ });
92
+ }
93
+ return renderChromeSlot?.(slot, chromeView) ?? null;
94
+ };
95
+ const headerActions = componentSystem.prompts.PromptHeaderActions({
96
+ actions: (_jsx(ProjectedViewChrome, { componentSystem: componentSystem, placement: viewChromeSlotPlacements.header, renderSlot: (slot) => renderPromptChromeSlot(slot, view), view: view })),
97
+ closeButton: view.PromptDismiss?.ShowCloseButton && dismissAction && !dismissAction.isHidden ? (_jsx(ActionButton, { "aria-label": "Close", disabled: !dismissAction.canDismiss, onClick: dismissAction.execute, size: "icon-sm", type: "button", variant: "ghost", children: renderPresentationIcon({
98
+ className: 'size-4',
99
+ icon: promptChromeIconIds.close,
100
+ module,
101
+ }) })) : null,
102
+ viewId: view.Id,
103
+ });
104
+ const footer = componentSystem.prompts.PromptFooter({
105
+ children: hasFooterActionChrome ? (_jsx(ProjectedViewChrome, { componentSystem: componentSystem, placement: viewChromeSlotPlacements.footer, renderSlot: (slot) => renderPromptChromeSlot(slot, view), view: view })) : (renderPromptActionFooter({
106
+ actionGroupOptions,
107
+ componentSystem,
108
+ context,
109
+ dataSourceResolver,
110
+ designSystem,
111
+ module,
112
+ view: actionView,
113
+ })),
114
+ viewId: view.Id,
115
+ });
116
+ return componentSystem.prompts.PromptModal({
117
+ ariaLabelledBy: titleId,
118
+ className: cn(layoutClasses.containerClassName, className),
119
+ description: description && !hasDescriptionStatusChrome ? description : null,
120
+ footer,
121
+ headerActions,
122
+ onBackdropMouseDown: handleBackdropMouseDown,
123
+ role: view.Accessibility?.Role ?? 'dialog',
124
+ title: title ?? view.Name,
125
+ titleId,
126
+ children: (_jsxs(_Fragment, { children: [_jsx(ProjectedViewChrome, { componentSystem: componentSystem, placement: viewChromeSlotPlacements.beforeContent, renderSlot: (slot) => renderPromptChromeSlot(slot, view), view: view }), componentSystem.prompts.PromptContent({
127
+ className: cn(layoutClasses.contentClassName, contentClassName),
128
+ viewId: view.Id,
129
+ children: (_jsx(_Fragment, { children: bodyRegions.map((region) => renderPromptRegion({
130
+ componentSystem,
131
+ context,
132
+ dataSourceResolver,
133
+ module,
134
+ region,
135
+ regionRenderers,
136
+ renderRegion,
137
+ renderView,
138
+ view,
139
+ })) })),
140
+ }), _jsx(ProjectedViewChrome, { componentSystem: componentSystem, placement: viewChromeSlotPlacements.afterContent, renderSlot: (slot) => renderPromptChromeSlot(slot, view), view: view })] })),
141
+ });
142
+ }
143
+ function renderPromptActionFooter({ actionGroupOptions, componentSystem, context, dataSourceResolver, designSystem, module, view, }) {
144
+ if (view.Actions.length === 0 || !actionGroupOptions) {
145
+ return null;
146
+ }
147
+ return (_jsx(PresentationActionGroup, { context: context, dataSourceResolver: dataSourceResolver, module: module, options: {
148
+ ...actionGroupOptions,
149
+ className: actionGroupOptions.className ?? 'flex flex-wrap items-center justify-end gap-2',
150
+ componentSystem,
151
+ designSystem,
152
+ }, view: view }));
153
+ }
154
+ function renderPromptActionGroup({ actionGroupOptions, actions, componentSystem, context, dataSourceResolver, designSystem, module, view, }) {
155
+ if (actions.length === 0 || !actionGroupOptions) {
156
+ return null;
157
+ }
158
+ return (_jsx(PresentationActionGroup, { context: context, dataSourceResolver: dataSourceResolver, module: module, options: {
159
+ ...actionGroupOptions,
160
+ className: actionGroupOptions.className ?? 'flex flex-wrap items-center justify-end gap-2',
161
+ componentSystem,
162
+ designSystem,
163
+ }, view: {
164
+ ...view,
165
+ Actions: [...actions],
166
+ Chrome: null,
167
+ } }));
168
+ }
169
+ function hasActionChromeSlotAtPlacement(view, placement) {
170
+ return view.Chrome?.Slots.some((slot) => isViewChromeSlotKind(slot, viewChromeSlotKinds.actions) &&
171
+ isViewChromeSlotPlacementValue(resolveViewChromeSlotPlacement(slot), placement)) ?? false;
172
+ }
173
+ function hasStatusChromeSlotAtPlacement(view, placement) {
174
+ return view.Chrome?.Slots.some((slot) => isViewChromeSlotKind(slot, viewChromeSlotKinds.status) &&
175
+ isViewChromeSlotPlacementValue(resolveViewChromeSlotPlacement(slot), placement)) ?? false;
176
+ }
177
+ function resolvePromptLayoutClasses(view, dataSourceResolver) {
178
+ if (view.Design?.Layout === 'expanded') {
179
+ return {
180
+ containerClassName: 'h-full max-w-6xl overflow-hidden',
181
+ contentClassName: 'min-h-0 flex-1 overflow-hidden',
182
+ };
183
+ }
184
+ if (view.Design?.Layout === 'active-content-expanded' && isPromptContentActive(view, dataSourceResolver)) {
185
+ return {
186
+ containerClassName: 'h-full max-w-6xl overflow-hidden',
187
+ contentClassName: 'min-h-0 flex-1 overflow-hidden',
188
+ };
189
+ }
190
+ return {};
191
+ }
192
+ function isPromptContentActive(view, dataSourceResolver) {
193
+ return resolvePresentationViewDataSourceIds(view).some((dataSourceId) => {
194
+ const state = dataSourceResolver.resolve(dataSourceId);
195
+ return Boolean(state?.isPending ||
196
+ state?.isFetching ||
197
+ state?.data !== null && state?.data !== undefined);
198
+ });
199
+ }
200
+ function renderPromptRegion({ componentSystem, context, dataSourceResolver, module, region, regionRenderers, renderRegion, renderView, view, }) {
201
+ const regionContext = {
202
+ context,
203
+ dataSourceResolver,
204
+ module,
205
+ region,
206
+ renderView,
207
+ view,
208
+ };
209
+ const rendered = regionRenderers?.[region.Id]?.(regionContext) ?? renderRegion?.(regionContext);
210
+ if (rendered !== undefined) {
211
+ return (_jsx(Fragment, { children: componentSystem.prompts.PromptRegion({
212
+ region,
213
+ viewId: view.Id,
214
+ children: rendered,
215
+ }) }, region.Id));
216
+ }
217
+ if (!renderView || region.ViewIds.length === 0) {
218
+ return null;
219
+ }
220
+ return (_jsx(Fragment, { children: componentSystem.prompts.PromptRegion({
221
+ region,
222
+ viewId: view.Id,
223
+ children: region.ViewIds.map((viewId) => (_jsx("div", { className: "h-full min-h-0", children: renderView(viewId) }, viewId))),
224
+ }) }, region.Id));
225
+ }
226
+ function isActionRegion(region, actionRegionId) {
227
+ return region.Id === actionRegionId || region.Kind === viewRegionKinds.footer;
228
+ }
229
+ function resolvePromptDismissAction({ actionGroupOptions, context, dataSourceResolver, module, view, }) {
230
+ const dismissPolicy = view.PromptDismiss;
231
+ if (!dismissPolicy || !actionGroupOptions?.executeAction) {
232
+ return null;
233
+ }
234
+ const placement = getPresentationViewProjectedActionPlacements(view)
235
+ .find((candidate) => candidate.ActionId === dismissPolicy.DismissActionId) ??
236
+ {
237
+ ActionId: dismissPolicy.DismissActionId,
238
+ Icon: 'x',
239
+ Label: 'Close',
240
+ Region: 'dismiss',
241
+ };
242
+ const action = findPresentationAction(module, placement.ActionId);
243
+ const invalidatedDataSourceIds = action?.Result?.InvalidateDataSourceIds ??
244
+ resolvePresentationViewDataSourceIds(view);
245
+ const isFetching = isPresentationViewFetching({
246
+ ...view,
247
+ DataSourceIds: invalidatedDataSourceIds,
248
+ }, dataSourceResolver);
249
+ const baseContext = {
250
+ action,
251
+ context,
252
+ dataSourceResolver,
253
+ invalidatedDataSourceIds,
254
+ isFetching,
255
+ module,
256
+ placement,
257
+ view,
258
+ };
259
+ const resolvedInvalidatedDataSourceIds = actionGroupOptions.resolveInvalidatedDataSourceIds?.(baseContext) ??
260
+ invalidatedDataSourceIds;
261
+ const resolvedContext = {
262
+ ...baseContext,
263
+ invalidatedDataSourceIds: resolvedInvalidatedDataSourceIds,
264
+ };
265
+ const actionState = actionGroupOptions.resolveActionState?.(resolvedContext) ?? {};
266
+ const isBlocked = resolvedInvalidatedDataSourceIds.some((dataSourceId) => dataSourceResolver.resolve(dataSourceId)?.isBlocked);
267
+ const canExecute = actionGroupOptions.canExecuteAction?.(resolvedContext) ?? true;
268
+ const isHidden = Boolean(actionState.isHidden);
269
+ const isPending = Boolean(actionState.isPending);
270
+ const canDismiss = Boolean(canExecute &&
271
+ !actionState.isDisabled &&
272
+ !isBlocked &&
273
+ !isFetching &&
274
+ (!dismissPolicy.DisableWhenActionPending || !isPending));
275
+ return {
276
+ canDismiss,
277
+ execute: () => {
278
+ if (isHidden || !canDismiss) {
279
+ return;
280
+ }
281
+ void actionGroupOptions.executeAction?.(resolvedContext);
282
+ },
283
+ isHidden,
284
+ };
285
+ }
286
+ function toDomId(value) {
287
+ return value.replace(/[^a-zA-Z0-9_-]+/g, '-');
288
+ }
289
+ function cn(...values) {
290
+ return values.filter(Boolean).join(' ');
291
+ }
292
+ //# sourceMappingURL=projected-prompt-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projected-prompt-view.js","sourceRoot":"","sources":["../src/projected-prompt-view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAmC,MAAM,OAAO,CAAA;AAErF,OAAO,EACL,sBAAsB,EACtB,4CAA4C,EAC5C,0BAA0B,EAC1B,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,oCAAoC,GAQrC,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,uBAAuB,GAGxB,MAAM,6BAA6B,CAAA;AAKpC,OAAO,EACL,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,kCAAkC,GACnC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,4CAA4C,GAC7C,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,yBAAyB,CAAA;AAIhC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,GAChB,MAAM,yCAAyC,CAAA;AAkChD,MAAM,UAAU,mBAAmB,CAAW,EAC5C,kBAAkB,EAClB,cAAc,GAAG,QAAQ,EACzB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,KAAK,EACL,IAAI,GAC+B;IACnC,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAA;IAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAA;IACzD,MAAM,aAAa,GAAG,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAC5F,MAAM,UAAU,GAAG;QACjB,GAAG,IAAI;QACP,OAAO,EAAE,4CAA4C,CAAC,IAAI,CAAC;aACxD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC;QACvD,MAAM,EAAE,IAAI;KACY,CAAA;IAC1B,MAAM,qBAAqB,GAAG,8BAA8B,CAC1D,IAAI,EACJ,wBAAwB,CAAC,MAAM,CAChC,CAAA;IACD,MAAM,0BAA0B,GAC9B,OAAO,CAAC,gBAAgB,CAAC;QACzB,8BAA8B,CAAC,IAAI,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAA;IAC9E,MAAM,aAAa,GAAG,0BAA0B,CAAC;QAC/C,kBAAkB;QAClB,OAAO;QACP,kBAAkB;QAClB,MAAM;QACN,IAAI;KACL,CAAC,CAAA;IACF,MAAM,qBAAqB,GAAG,OAAO,CACnC,GAAG,EAAE,CAAC,kCAAkC,CAAC;QACvC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe;YACxC,CAAC,CAAC,CAAC;oBACC,IAAI,EAAE,mBAAmB,CAAC,KAAK;oBAC/B,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,QAAQ;oBACtB,IAAI,EAAE,oBAAoB;oBAC1B,KAAK,EAAE,cAAc;iBACtB,CAAC;YACJ,CAAC,CAAC,EAAE;QACN,MAAM;QACN,MAAM,EAAE,0BAA0B,IAAI,CAAC,EAAE,EAAE;QAC3C,SAAS,EAAE,IAAI,CAAC,EAAE;QAClB,WAAW,EAAE,IAAI,CAAC,IAAI;KACvB,CAAC,EACF;QACE,MAAM;QACN,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,aAAa,EAAE,eAAe;KACpC,CACF,CAAA;IACD,4CAA4C,CAC1C,0BAA0B,IAAI,CAAC,EAAE,EAAE,EACnC,qBAAqB,CACtB,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IACE,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe;YACpC,CAAC,aAAa;YACd,aAAa,CAAC,QAAQ;YACtB,CAAC,aAAa,CAAC,UAAU,EACzB,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAA;QAC5C,SAAS,aAAa,CAAC,KAAoB;YACzC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAM;YACR,CAAC;YAED,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,cAAc,EAAE,CAAA;QAClB,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QACjD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACnE,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAA;IAExD,SAAS,uBAAuB,CAAC,KAAiC;QAChE,IACE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;YACpC,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB;YACtC,CAAC,aAAa;YACd,aAAa,CAAC,QAAQ;YACtB,CAAC,aAAa,CAAC,UAAU,EACzB,CAAC;YACD,OAAM;QACR,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,aAAa,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IACD,MAAM,sBAAsB,GAAG,CAC7B,IAA8B,EAC9B,UAAiC,EACjC,EAAE;QACF,IAAI,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,OAAO,uBAAuB,CAAC;gBAC7B,kBAAkB;gBAClB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO;gBACpE,eAAe;gBACf,OAAO;gBACP,kBAAkB;gBAClB,YAAY;gBACZ,MAAM;gBACN,IAAI;aACL,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,gBAAgB,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAA;IACrD,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAChE,OAAO,EAAE,CACP,KAAC,mBAAmB,IAClB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,wBAAwB,CAAC,MAAM,EAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EACxD,IAAI,EAAE,IAAI,GACV,CACH;QACD,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC7F,KAAC,YAAY,kBACA,OAAO,EAClB,QAAQ,EAAE,CAAC,aAAa,CAAC,UAAU,EACnC,OAAO,EAAE,aAAa,CAAC,OAAO,EAC9B,IAAI,EAAC,SAAS,EACd,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,YAEd,sBAAsB,CAAC;gBACtB,SAAS,EAAE,QAAQ;gBACnB,IAAI,EAAE,mBAAmB,CAAC,KAAK;gBAC/B,MAAM;aACP,CAAC,GACW,CAChB,CAAC,CAAC,CAAC,IAAI;QACR,MAAM,EAAE,IAAI,CAAC,EAAE;KAChB,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;QAClD,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAChC,KAAC,mBAAmB,IAClB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,wBAAwB,CAAC,MAAM,EAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EACxD,IAAI,EAAE,IAAI,GACV,CACH,CAAC,CAAC,CAAC,CACF,wBAAwB,CAAC;YACvB,kBAAkB;YAClB,eAAe;YACf,OAAO;YACP,kBAAkB;YAClB,YAAY;YACZ,MAAM;YACN,IAAI,EAAE,UAAU;SACjB,CAAC,CACH;QACD,MAAM,EAAE,IAAI,CAAC,EAAE;KAChB,CAAC,CAAA;IAEF,OAAO,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC;QACzC,cAAc,EAAE,OAAO;QACvB,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,SAAS,CAAC;QAC1D,WAAW,EAAE,WAAW,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QAC5E,MAAM;QACN,aAAa;QACb,mBAAmB,EAAE,uBAAuB;QAC5C,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,QAAQ;QAC1C,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI;QACzB,OAAO;QACP,QAAQ,EAAE,CACR,8BACE,KAAC,mBAAmB,IAClB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,wBAAwB,CAAC,aAAa,EACjD,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EACxD,IAAI,EAAE,IAAI,GACV,EAED,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC;oBACrC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;oBAC/D,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,QAAQ,EAAE,CACR,4BACG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC;4BAC9C,eAAe;4BACf,OAAO;4BACP,kBAAkB;4BAClB,MAAM;4BACN,MAAM;4BACN,eAAe;4BACf,YAAY;4BACZ,UAAU;4BACV,IAAI;yBACL,CAAC,CAAC,GACF,CACJ;iBACF,CAAC,EAEF,KAAC,mBAAmB,IAClB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,wBAAwB,CAAC,YAAY,EAChD,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,EACxD,IAAI,EAAE,IAAI,GACV,IACD,CACJ;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAW,EAC1C,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,IAAI,GASL;IACC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACrD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,uBAAuB,IACtB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;YACP,GAAG,kBAAkB;YACrB,SAAS,EAAE,kBAAkB,CAAC,SAAS,IAAI,+CAA+C;YAC1F,eAAe;YACf,YAAY;SACb,EACD,IAAI,EAAE,IAAI,GACV,CACH,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAAW,EACzC,kBAAkB,EAClB,OAAO,EACP,eAAe,EACf,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,IAAI,GAUL;IACC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,uBAAuB,IACtB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;YACP,GAAG,kBAAkB;YACrB,SAAS,EAAE,kBAAkB,CAAC,SAAS,IAAI,+CAA+C;YAC1F,eAAe;YACf,YAAY;SACb,EACD,IAAI,EAAE;YACJ,GAAG,IAAI;YACP,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;YACrB,MAAM,EAAE,IAAI;SACb,GACD,CACH,CAAA;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,IAAoB,EACpB,SAA0B;IAE1B,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACvD,8BAA8B,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK,CAAA;AAC7F,CAAC;AAED,SAAS,8BAA8B,CACrC,IAAoB,EACpB,SAA0B;IAE1B,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACtD,8BAA8B,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK,CAAA;AAC7F,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAoB,EACpB,kBAAkD;IAElD,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO;YACL,kBAAkB,EAAE,kCAAkC;YACtD,gBAAgB,EAAE,gCAAgC;SACnD,CAAA;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,yBAAyB,IAAI,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC;QACzG,OAAO;YACL,kBAAkB,EAAE,kCAAkC;YACtD,gBAAgB,EAAE,gCAAgC;SACnD,CAAA;IACH,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAoB,EACpB,kBAAkD;IAElD,OAAO,oCAAoC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;QACtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACtD,OAAO,OAAO,CACZ,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,IAAI,KAAK,SAAS,CAClD,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAW,EACpC,eAAe,EACf,OAAO,EACP,kBAAkB,EAClB,MAAM,EACN,MAAM,EACN,eAAe,EACf,YAAY,EACZ,UAAU,EACV,IAAI,GAKL;IACC,MAAM,aAAa,GAAG;QACpB,OAAO;QACP,kBAAkB;QAClB,MAAM;QACN,MAAM;QACN,UAAU;QACV,IAAI;KACkD,CAAA;IACxD,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,YAAY,EAAE,CAAC,aAAa,CAAC,CAAA;IAC/F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CACL,KAAC,QAAQ,cACN,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;gBACpC,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,QAAQ;aACnB,CAAC,IALW,MAAM,CAAC,EAAE,CAMb,CACZ,CAAA;IACH,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,QAAQ,cACN,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;YACpC,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvC,cAAK,SAAS,EAAC,gBAAgB,YAC5B,UAAU,CAAC,MAAM,CAAC,IADgB,MAAM,CAErC,CACP,CAAC;SACH,CAAC,IATW,MAAM,CAAC,EAAE,CAUb,CACZ,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAA4B,EAAE,cAAsB;IAC1E,OAAO,MAAM,CAAC,EAAE,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,CAAA;AAC/E,CAAC;AAED,SAAS,0BAA0B,CAAW,EAC5C,kBAAkB,EAClB,OAAO,EACP,kBAAkB,EAClB,MAAM,EACN,IAAI,GAOL;IACC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;IACxC,IAAI,CAAC,aAAa,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;QACzD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GACb,4CAA4C,CAAC,IAAI,CAAC;SAC/C,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,aAAa,CAAC,eAAe,CAAC;QAC3E;YACC,QAAQ,EAAE,aAAa,CAAC,eAAe;YACvC,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,SAAS;SACmB,CAAA;IACxC,MAAM,MAAM,GAAG,sBAAsB,CACnC,MAAM,EACN,SAAS,CAAC,QAAQ,CACnB,CAAA;IACD,MAAM,wBAAwB,GAC5B,MAAM,EAAE,MAAM,EAAE,uBAAuB;QACvC,oCAAoC,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,0BAA0B,CAC3C;QACE,GAAG,IAAI;QACP,aAAa,EAAE,wBAAwB;KACxC,EACD,kBAAkB,CACnB,CAAA;IACD,MAAM,WAAW,GAAG;QAClB,MAAM;QACN,OAAO;QACP,kBAAkB;QAClB,wBAAwB;QACxB,UAAU;QACV,MAAM;QACN,SAAS;QACT,IAAI;KAC+C,CAAA;IACrD,MAAM,gCAAgC,GACpC,kBAAkB,CAAC,+BAA+B,EAAE,CAAC,WAAW,CAAC;QACjE,wBAAwB,CAAA;IAC1B,MAAM,eAAe,GAAG;QACtB,GAAG,WAAW;QACd,wBAAwB,EAAE,gCAAgC;KACP,CAAA;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;IAClF,MAAM,SAAS,GAAG,gCAAgC,CAAC,IAAI,CACrD,CAAC,YAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,CACtE,CAAA;IACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,IAAI,IAAI,CAAA;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAChD,MAAM,UAAU,GAAG,OAAO,CACxB,UAAU;QACV,CAAC,WAAW,CAAC,UAAU;QACvB,CAAC,SAAS;QACV,CAAC,UAAU;QACX,CAAC,CAAC,aAAa,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,CACxD,CAAA;IAED,OAAO;QACL,UAAU;QACV,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC5B,OAAM;YACR,CAAC;YAED,KAAK,kBAAkB,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,CAAA;QAC1D,CAAC;QACD,QAAQ;KACT,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,EAAE,CAAC,GAAG,MAAsD;IACnE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { type PresentationModuleDefinition, type PresentationDataSourceResolver, type ProjectedQueryFormRuntime, type QueryFormDefinition, type ViewDefinition } from '@cohesivesystems/presentation-core';
2
+ import type { PresentationShadcnComponentSystem as PresentationComponentSystem } from './presentation-shadcn-component-system.js';
3
+ import type { PresentationDesignSystem } from '@cohesivesystems/presentation-tailwind';
4
+ import { type ProjectedInputFormChoice, type ProjectedInputFormChoiceClassNameContext, type ProjectedInputFormChoiceClassNameResolver, type ProjectedInputFormChoiceRenderContext, type ProjectedInputFormChoiceToneResolver, type ProjectedInputFormFieldRenderer, type ProjectedInputFormFieldRenderContext } from './projected-input-form.js';
5
+ import type { ProjectedViewSurfaceChromeSlotRenderer } from './projected-view-surface.js';
6
+ export type { ProjectedInputFormChoice as ProjectedQueryFormChoice, ProjectedInputFormChoiceClassNameContext as ProjectedQueryFormChoiceClassNameContext, ProjectedInputFormChoiceClassNameResolver as ProjectedQueryFormChoiceClassNameResolver, ProjectedInputFormChoiceRenderContext as ProjectedQueryFormChoiceRenderContext, ProjectedInputFormChoiceToneResolver as ProjectedQueryFormChoiceToneResolver, ProjectedInputFormFieldRenderer as ProjectedQueryFormFieldRenderer, ProjectedInputFormFieldRenderContext as ProjectedQueryFormFieldRenderContext, };
7
+ export type { ProjectedQueryFormActionContext, ProjectedQueryFormRuntime, ProjectedQueryFormValueChangeContext, } from '@cohesivesystems/presentation-core';
8
+ /**
9
+ * Props required to project a backend-declared query form into React controls.
10
+ *
11
+ * @typeParam TValue - Shape of the caller-owned query state object.
12
+ */
13
+ export interface ProjectedQueryFormProps<TValue extends object = object> {
14
+ /** Optional resolver that maps a choice and tone to toggle styling. */
15
+ readonly choiceToggleClassName?: ProjectedInputFormChoiceClassNameResolver;
16
+ /** Optional resolver that normalizes domain choice metadata into a presentation tone. */
17
+ readonly choiceTone?: ProjectedInputFormChoiceToneResolver;
18
+ /** Class name applied to the projected view surface. */
19
+ readonly className?: string;
20
+ /** Class name applied to projected view chrome after the form body. */
21
+ readonly chromeAfterContentClassName?: string;
22
+ /** Class name applied to projected view chrome before the form body. */
23
+ readonly chromeBeforeContentClassName?: string;
24
+ /** Class name applied to projected view chrome in the surface footer. */
25
+ readonly chromeFooterClassName?: string;
26
+ /** Class name applied to projected view chrome in the surface header. */
27
+ readonly chromeHeaderClassName?: string;
28
+ /** Class name applied to the projected view surface content area. */
29
+ readonly contentClassName?: string;
30
+ /** Component implementation set used for projected form controls. */
31
+ readonly componentSystem: PresentationComponentSystem;
32
+ /** Presentation target component set used to resolve declared icons. */
33
+ readonly componentSet?: string;
34
+ /** Design-system class and semantic resolvers used for projected form layout. */
35
+ readonly designSystem: PresentationDesignSystem;
36
+ /** Resolver for data sources used by field choice sources. */
37
+ readonly dataSourceResolver: PresentationDataSourceResolver;
38
+ /** Field renderer overrides keyed by input-form field id or presentation field id. */
39
+ readonly fieldRenderers?: Readonly<Record<string, ProjectedInputFormFieldRenderer>>;
40
+ /** Presentation module that owns the query form, input form, fields, and actions. */
41
+ readonly module: PresentationModuleDefinition;
42
+ /** Query form to project; null renders a diagnostic status block. */
43
+ readonly queryForm: QueryFormDefinition | null;
44
+ /** Runtime state and action handlers; null renders a diagnostic status block. */
45
+ readonly runtime: ProjectedQueryFormRuntime<TValue> | null;
46
+ /** Interprets non-form view chrome slots declared by the hosting view. */
47
+ readonly renderChromeSlot?: ProjectedViewSurfaceChromeSlotRenderer;
48
+ /** View that hosts the query form and supplies surface identity. */
49
+ readonly view: ViewDefinition;
50
+ }
51
+ /**
52
+ * Projects a relation-query specialization by delegating the interaction surface
53
+ * to the generic input-form renderer.
54
+ */
55
+ export declare function ProjectedQueryForm<TValue extends object = object>({ choiceToggleClassName, choiceTone, className, chromeAfterContentClassName, chromeBeforeContentClassName, chromeFooterClassName, chromeHeaderClassName, componentSet, componentSystem, contentClassName, dataSourceResolver, designSystem, fieldRenderers, module, queryForm, renderChromeSlot, runtime, view, }: ProjectedQueryFormProps<TValue>): import("react/jsx-runtime").JSX.Element | null;
56
+ //# sourceMappingURL=projected-query-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projected-query-form.d.ts","sourceRoot":"","sources":["../src/projected-query-form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createPresentationProjectionDiagnostic, createRelationQueryInputFormTarget, findPresentationInputForm, } from '@cohesivesystems/presentation-core';
3
+ import { useMemo } from 'react';
4
+ import { useRegisterPresentationProjectionDiagnostics } from '@cohesivesystems/presentation-react';
5
+ import { ProjectedInputForm, } from './projected-input-form.js';
6
+ import { ProjectedStatusBlock } from './projected-activity-state.js';
7
+ /**
8
+ * Projects a relation-query specialization by delegating the interaction surface
9
+ * to the generic input-form renderer.
10
+ */
11
+ export function ProjectedQueryForm({ choiceToggleClassName, choiceTone, className, chromeAfterContentClassName, chromeBeforeContentClassName, chromeFooterClassName, chromeHeaderClassName, componentSet, componentSystem, contentClassName, dataSourceResolver, designSystem, fieldRenderers, module, queryForm, renderChromeSlot, runtime, view, }) {
12
+ const inputForm = queryForm
13
+ ? findPresentationInputForm(module, queryForm.FormId)
14
+ : null;
15
+ const bindingDiagnosticsSource = `projected-query-form-binding:${view.Id}:${queryForm?.Id ?? 'missing'}`;
16
+ const bindingDiagnostics = useMemo(() => createQueryFormBindingDiagnostics({
17
+ inputForm,
18
+ queryForm,
19
+ source: bindingDiagnosticsSource,
20
+ view,
21
+ }), [bindingDiagnosticsSource, inputForm, queryForm, view]);
22
+ useRegisterPresentationProjectionDiagnostics(bindingDiagnosticsSource, bindingDiagnostics);
23
+ if (!queryForm) {
24
+ return _jsx(ProjectedStatusBlock, { label: `Presentation view '${view.Name}' has no query form binding.` });
25
+ }
26
+ if (!inputForm) {
27
+ return null;
28
+ }
29
+ if (!runtime) {
30
+ return _jsx(ProjectedStatusBlock, { label: `Query form '${inputForm.Name}' has no runtime binding.` });
31
+ }
32
+ return (_jsx(ProjectedInputForm, { choiceToggleClassName: choiceToggleClassName, choiceTone: choiceTone, className: className, chromeAfterContentClassName: chromeAfterContentClassName, chromeBeforeContentClassName: chromeBeforeContentClassName, chromeFooterClassName: chromeFooterClassName, chromeHeaderClassName: chromeHeaderClassName, componentSystem: componentSystem, componentSet: componentSet, contentClassName: contentClassName, dataSourceResolver: dataSourceResolver, designSystem: designSystem, fieldRenderers: fieldRenderers, inputForm: inputForm, module: module, renderChromeSlot: renderChromeSlot, runtime: createQueryInputFormRuntime(runtime, queryForm), target: createRelationQueryInputFormTarget({
33
+ dataSourceResolver,
34
+ inputForm,
35
+ queryForm,
36
+ view,
37
+ }), view: view }));
38
+ }
39
+ function createQueryFormBindingDiagnostics({ inputForm, queryForm, source, view, }) {
40
+ if (!queryForm || inputForm) {
41
+ return [];
42
+ }
43
+ return [
44
+ createPresentationProjectionDiagnostic({
45
+ category: 'missing-definition',
46
+ details: {
47
+ formId: queryForm.FormId,
48
+ queryFormId: queryForm.Id,
49
+ viewId: view.Id,
50
+ },
51
+ id: `query-form.${queryForm.Id}.input-form.${queryForm.FormId}.missing-definition`,
52
+ interpretation: {
53
+ status: 'unbound',
54
+ target: 'query-form-input-form-definition',
55
+ },
56
+ message: `Query form '${queryForm.Id}' has no input form '${queryForm.FormId}'.`,
57
+ severity: 'error',
58
+ source,
59
+ subject: {
60
+ id: queryForm.Id,
61
+ kind: 'query-form',
62
+ name: queryForm.Id,
63
+ },
64
+ suggestedNextStep: `Define input form '${queryForm.FormId}' or update query form '${queryForm.Id}' to reference an existing input form.`,
65
+ }),
66
+ ];
67
+ }
68
+ function createQueryInputFormRuntime(runtime, queryForm) {
69
+ return {
70
+ invokeAction: ({ choiceValuesByFieldId, inputForm, placement, target, value }) => {
71
+ const queryContext = {
72
+ choiceValuesByFieldId,
73
+ inputForm,
74
+ queryForm,
75
+ stateId: target.stateId,
76
+ value,
77
+ };
78
+ if (isResetAction(placement.ActionId)) {
79
+ runtime.reset(queryContext);
80
+ return;
81
+ }
82
+ runtime.apply(queryContext);
83
+ },
84
+ setValue: (update, context) => runtime.setValue(update, context ? createQueryFormValueChangeContext(queryForm, context) : undefined),
85
+ value: runtime.value,
86
+ };
87
+ }
88
+ function createQueryFormValueChangeContext(queryForm, context) {
89
+ return {
90
+ choiceValuesByFieldId: context.choiceValuesByFieldId,
91
+ inputForm: context.inputForm,
92
+ queryForm,
93
+ stateId: context.target.stateId,
94
+ value: context.value,
95
+ };
96
+ }
97
+ function isResetAction(actionId) {
98
+ return actionId.toLocaleLowerCase().includes('reset');
99
+ }
100
+ //# sourceMappingURL=projected-query-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projected-query-form.js","sourceRoot":"","sources":["../src/projected-query-form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type FieldPresentationDefinition, type PresentationHrefNavigator, type PresentationNavigationHrefFactory } from '@cohesivesystems/presentation-core';
3
+ import type { PresentationShadcnComponentSystem as PresentationComponentSystem } from './presentation-shadcn-component-system.js';
4
+ export interface ProjectedRecordFieldRenderContext<TData extends object> {
5
+ readonly field: FieldPresentationDefinition;
6
+ readonly record: TData;
7
+ readonly value: unknown;
8
+ }
9
+ export interface ProjectedRecordDetailsProps<TData extends object> {
10
+ readonly componentSystem: PresentationComponentSystem;
11
+ readonly createHref?: PresentationNavigationHrefFactory;
12
+ readonly data: TData;
13
+ readonly emptyMessage?: string;
14
+ readonly fieldRenderers?: Record<string, (context: ProjectedRecordFieldRenderContext<TData>) => ReactNode>;
15
+ readonly hiddenFieldLabels?: readonly string[];
16
+ readonly navigateHref?: PresentationHrefNavigator;
17
+ readonly viewId: string;
18
+ }
19
+ export declare function ProjectedRecordDetails<TData extends object>({ componentSystem, createHref: createHrefOverride, data, emptyMessage, fieldRenderers, hiddenFieldLabels, navigateHref: navigateHrefOverride, viewId, }: ProjectedRecordDetailsProps<TData>): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=projected-record-details.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projected-record-details.d.ts","sourceRoot":"","sources":["../src/projected-record-details.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,EAKL,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EAEvC,MAAM,oCAAoC,CAAA;AAK3C,OAAO,KAAK,EACV,iCAAiC,IAAI,2BAA2B,EACjE,MAAM,wCAAwC,CAAA;AAK/C,MAAM,WAAW,iCAAiC,CAAC,KAAK,SAAS,MAAM;IACrE,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,2BAA2B,CAAC,KAAK,SAAS,MAAM;IAC/D,QAAQ,CAAC,eAAe,EAAE,2BAA2B,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,iCAAiC,CAAA;IACvD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAC9B,MAAM,EACN,CAAC,OAAO,EAAE,iCAAiC,CAAC,KAAK,CAAC,KAAK,SAAS,CACjE,CAAA;IACD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,yBAAyB,CAAA;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,SAAS,MAAM,EAAE,EAC3D,eAAe,EACf,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EACJ,YAA0C,EAC1C,cAAc,EACd,iBAAsB,EACtB,YAAY,EAAE,oBAAoB,EAClC,MAAM,GACP,EAAE,2BAA2B,CAAC,KAAK,CAAC,2CAmDpC"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import {} from 'react';
3
+ import { findPresentationField, findPresentationView, getPresentationViewProjectedFieldIds, readObjectPath, } from '@cohesivesystems/presentation-core';
4
+ import { usePresentationModule, usePresentationNavigationRuntime, } from '@cohesivesystems/presentation-react';
5
+ import { renderProjectedFieldValue, } from './projected-field-value-rendering.js';
6
+ export function ProjectedRecordDetails({ componentSystem, createHref: createHrefOverride, data, emptyMessage = 'No details are available.', fieldRenderers, hiddenFieldLabels = [], navigateHref: navigateHrefOverride, viewId, }) {
7
+ const module = usePresentationModule();
8
+ const navigation = usePresentationNavigationRuntime();
9
+ const createHref = createHrefOverride ?? navigation.createHref;
10
+ const navigateHref = navigateHrefOverride ?? navigation.navigateHref;
11
+ const view = findPresentationView(module, viewId);
12
+ const fields = (view ? getPresentationViewProjectedFieldIds(view) : []).flatMap((fieldId) => {
13
+ const field = findPresentationField(module, fieldId);
14
+ return field ? [field] : [];
15
+ });
16
+ const RecordDetailEmptyState = componentSystem.records.RecordDetailEmptyState;
17
+ const RecordDetailField = componentSystem.records.RecordDetailField;
18
+ const RecordDetails = componentSystem.records.RecordDetails;
19
+ if (!module || !view || fields.length === 0) {
20
+ return (_jsx(RecordDetailEmptyState, { label: emptyMessage, viewId: viewId }));
21
+ }
22
+ return (_jsx(RecordDetails, { viewId: viewId, children: fields.map((field) => {
23
+ const value = readProjectedValue(data, field.Field);
24
+ const renderer = fieldRenderers?.[field.Id] ?? fieldRenderers?.[field.Field];
25
+ const hideLabel = isFieldLabelHidden(field, hiddenFieldLabels);
26
+ const renderedValue = renderer
27
+ ? renderer({ field, record: data, value })
28
+ : renderProjectedFieldValue({
29
+ componentSystem,
30
+ createHref,
31
+ emptyValueFallback: _jsx("span", { className: "text-slate-400", children: "n/a" }),
32
+ field,
33
+ module,
34
+ navigateHref,
35
+ resource: data,
36
+ value,
37
+ });
38
+ return (_jsx(RecordDetailField, { fieldId: field.Id, hideLabel: hideLabel, label: field.Label, value: renderedValue }, field.Id));
39
+ }) }));
40
+ }
41
+ function isFieldLabelHidden(field, hiddenFieldLabels) {
42
+ return hiddenFieldLabels.includes(field.Id) || hiddenFieldLabels.includes(field.Field);
43
+ }
44
+ function readProjectedValue(row, fieldPath) {
45
+ const exactValue = readObjectPath(row, fieldPath);
46
+ if (exactValue !== undefined) {
47
+ return exactValue;
48
+ }
49
+ const fieldName = fieldPath.split('.').at(-1) ?? fieldPath;
50
+ return readObjectProperty(row, fieldName);
51
+ }
52
+ function readObjectProperty(row, propertyName) {
53
+ const record = row;
54
+ if (Object.prototype.hasOwnProperty.call(record, propertyName)) {
55
+ return record[propertyName];
56
+ }
57
+ const match = Object.keys(record).find((candidate) => candidate.toLocaleLowerCase() === propertyName.toLocaleLowerCase());
58
+ return match ? record[match] : undefined;
59
+ }
60
+ //# sourceMappingURL=projected-record-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projected-record-details.js","sourceRoot":"","sources":["../src/projected-record-details.tsx"],"names":[],"mappings":"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"}