@specverse/runtime 4.1.0 → 4.1.2

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 (93) hide show
  1. package/README.md +356 -0
  2. package/dist/runtime/views/core/atomic-components-registry.d.ts +63 -0
  3. package/dist/runtime/views/core/atomic-components-registry.d.ts.map +1 -0
  4. package/dist/runtime/views/core/atomic-components-registry.js +822 -0
  5. package/dist/runtime/views/core/atomic-components-registry.js.map +1 -0
  6. package/dist/runtime/views/core/composite-pattern-types.d.ts +171 -0
  7. package/dist/runtime/views/core/composite-pattern-types.d.ts.map +1 -0
  8. package/dist/runtime/views/core/composite-pattern-types.js +11 -0
  9. package/dist/runtime/views/core/composite-pattern-types.js.map +1 -0
  10. package/dist/runtime/views/core/composite-patterns.d.ts +67 -0
  11. package/dist/runtime/views/core/composite-patterns.d.ts.map +1 -0
  12. package/dist/runtime/views/core/composite-patterns.js +485 -0
  13. package/dist/runtime/views/core/composite-patterns.js.map +1 -0
  14. package/dist/runtime/views/core/entity-display.d.ts +28 -0
  15. package/dist/runtime/views/core/entity-display.d.ts.map +1 -1
  16. package/dist/runtime/views/core/entity-display.js +75 -0
  17. package/dist/runtime/views/core/entity-display.js.map +1 -1
  18. package/dist/runtime/views/core/index.d.ts +4 -1
  19. package/dist/runtime/views/core/index.d.ts.map +1 -1
  20. package/dist/runtime/views/core/index.js +5 -1
  21. package/dist/runtime/views/core/index.js.map +1 -1
  22. package/dist/runtime/views/core/pattern-engine.d.ts +2 -2
  23. package/dist/runtime/views/core/pattern-engine.d.ts.map +1 -1
  24. package/dist/runtime/views/core/pattern-engine.js.map +1 -1
  25. package/dist/runtime/views/core/types.d.ts +2 -0
  26. package/dist/runtime/views/core/types.d.ts.map +1 -1
  27. package/dist/runtime/views/index.d.ts +5 -2
  28. package/dist/runtime/views/index.d.ts.map +1 -1
  29. package/dist/runtime/views/index.js +5 -2
  30. package/dist/runtime/views/index.js.map +1 -1
  31. package/dist/runtime/views/react/components/DevShell.d.ts.map +1 -1
  32. package/dist/runtime/views/react/components/DevShell.js +6 -2
  33. package/dist/runtime/views/react/components/DevShell.js.map +1 -1
  34. package/dist/runtime/views/react/components/EntitySelect.d.ts +14 -0
  35. package/dist/runtime/views/react/components/EntitySelect.d.ts.map +1 -0
  36. package/dist/runtime/views/react/components/EntitySelect.js +29 -0
  37. package/dist/runtime/views/react/components/EntitySelect.js.map +1 -0
  38. package/dist/runtime/views/react/components/EventStream.d.ts +11 -0
  39. package/dist/runtime/views/react/components/EventStream.d.ts.map +1 -0
  40. package/dist/runtime/views/react/components/EventStream.js +49 -0
  41. package/dist/runtime/views/react/components/EventStream.js.map +1 -0
  42. package/dist/runtime/views/react/components/FieldInput.d.ts +23 -0
  43. package/dist/runtime/views/react/components/FieldInput.d.ts.map +1 -0
  44. package/dist/runtime/views/react/components/FieldInput.js +28 -0
  45. package/dist/runtime/views/react/components/FieldInput.js.map +1 -0
  46. package/dist/runtime/views/react/components/FormView.d.ts +21 -0
  47. package/dist/runtime/views/react/components/FormView.d.ts.map +1 -0
  48. package/dist/runtime/views/react/components/FormView.js +13 -0
  49. package/dist/runtime/views/react/components/FormView.js.map +1 -0
  50. package/dist/runtime/views/react/components/ModelManager.d.ts +6 -2
  51. package/dist/runtime/views/react/components/ModelManager.d.ts.map +1 -1
  52. package/dist/runtime/views/react/components/ModelManager.js +166 -61
  53. package/dist/runtime/views/react/components/ModelManager.js.map +1 -1
  54. package/dist/runtime/views/react/components/ModelSelector.d.ts.map +1 -1
  55. package/dist/runtime/views/react/components/ModelSelector.js +4 -1
  56. package/dist/runtime/views/react/components/ModelSelector.js.map +1 -1
  57. package/dist/runtime/views/react/components/OperationExecutor.d.ts +15 -0
  58. package/dist/runtime/views/react/components/OperationExecutor.d.ts.map +1 -0
  59. package/dist/runtime/views/react/components/OperationExecutor.js +86 -0
  60. package/dist/runtime/views/react/components/OperationExecutor.js.map +1 -0
  61. package/dist/runtime/views/react/components/OperationResultView.d.ts +10 -0
  62. package/dist/runtime/views/react/components/OperationResultView.d.ts.map +1 -0
  63. package/dist/runtime/views/react/components/OperationResultView.js +92 -0
  64. package/dist/runtime/views/react/components/OperationResultView.js.map +1 -0
  65. package/dist/runtime/views/react/components/OperationView.d.ts +21 -0
  66. package/dist/runtime/views/react/components/OperationView.d.ts.map +1 -0
  67. package/dist/runtime/views/react/components/OperationView.js +7 -0
  68. package/dist/runtime/views/react/components/OperationView.js.map +1 -0
  69. package/dist/runtime/views/react/components/RelationshipField.js +4 -4
  70. package/dist/runtime/views/react/components/RelationshipField.js.map +1 -1
  71. package/dist/runtime/views/react/components/RuntimeView.d.ts.map +1 -1
  72. package/dist/runtime/views/react/components/RuntimeView.js +93 -33
  73. package/dist/runtime/views/react/components/RuntimeView.js.map +1 -1
  74. package/dist/runtime/views/react/components/ViewRouter.d.ts +7 -1
  75. package/dist/runtime/views/react/components/ViewRouter.d.ts.map +1 -1
  76. package/dist/runtime/views/react/components/ViewRouter.js +57 -18
  77. package/dist/runtime/views/react/components/ViewRouter.js.map +1 -1
  78. package/dist/runtime/views/react/hooks/useEventStream.d.ts +29 -0
  79. package/dist/runtime/views/react/hooks/useEventStream.d.ts.map +1 -0
  80. package/dist/runtime/views/react/hooks/useEventStream.js +114 -0
  81. package/dist/runtime/views/react/hooks/useEventStream.js.map +1 -0
  82. package/dist/runtime/views/react/hooks/useResizableSidebar.d.ts.map +1 -1
  83. package/dist/runtime/views/react/hooks/useResizableSidebar.js +2 -0
  84. package/dist/runtime/views/react/hooks/useResizableSidebar.js.map +1 -1
  85. package/dist/runtime/views/react/index.d.ts +10 -1
  86. package/dist/runtime/views/react/index.d.ts.map +1 -1
  87. package/dist/runtime/views/react/index.js +11 -1
  88. package/dist/runtime/views/react/index.js.map +1 -1
  89. package/dist/runtime/views/react/react-pattern-adapter.d.ts +235 -0
  90. package/dist/runtime/views/react/react-pattern-adapter.d.ts.map +1 -0
  91. package/dist/runtime/views/react/react-pattern-adapter.js +1450 -0
  92. package/dist/runtime/views/react/react-pattern-adapter.js.map +1 -0
  93. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * OperationResultView — Formatted display of operation execution results.
4
+ *
5
+ * Renders success/failure status, preconditions, steps, events, and return values.
6
+ */
7
+ import { useState, useEffect } from 'react';
8
+ import { useRuntimeContext } from '../context.js';
9
+ import { getEntityDisplayName } from '../../core/entity-display.js';
10
+ export function OperationResultView({ result }) {
11
+ const ctx = useRuntimeContext();
12
+ const apiBase = ctx.apiBaseUrl || '/api';
13
+ const [entityNames, setEntityNames] = useState({});
14
+ // Resolve entity IDs in the return value to display names
15
+ useEffect(() => {
16
+ if (!result?.returnValue || typeof result.returnValue !== 'object')
17
+ return;
18
+ const idsToResolve = Object.keys(result.returnValue).filter(k => /^\d+-\d+$/.test(k) || /^[0-9a-f]{8}-/.test(k));
19
+ if (idsToResolve.length === 0)
20
+ return;
21
+ // First try context entities (already loaded)
22
+ const names = {};
23
+ for (const [_model, modelEntities] of Object.entries(ctx.entities)) {
24
+ for (const entity of modelEntities) {
25
+ const internalId = entity.id;
26
+ const dataId = entity.data?.id;
27
+ const displayName = getEntityDisplayName(entity, ctx.entities);
28
+ if (idsToResolve.includes(internalId))
29
+ names[internalId] = displayName;
30
+ if (dataId && idsToResolve.includes(dataId))
31
+ names[dataId] = displayName;
32
+ }
33
+ }
34
+ // If unresolved IDs remain, fetch from API
35
+ const unresolved = idsToResolve.filter(id => !names[id]);
36
+ if (unresolved.length > 0 && apiBase) {
37
+ fetch(`${apiBase}/runtime/info`)
38
+ .then(r => r.json())
39
+ .then(async (info) => {
40
+ for (const model of (info.models || [])) {
41
+ try {
42
+ const res = await fetch(`${apiBase}/controllers/${model}Controller/list`, {
43
+ method: 'POST',
44
+ headers: { 'Content-Type': 'application/json' },
45
+ body: JSON.stringify({}),
46
+ });
47
+ const data = await res.json();
48
+ const entities = data.data?.entities || data.entities || [];
49
+ for (const entity of entities) {
50
+ const displayName = getEntityDisplayName(entity, {});
51
+ if (unresolved.includes(entity.id))
52
+ names[entity.id] = displayName;
53
+ if (entity.data?.id && unresolved.includes(entity.data.id))
54
+ names[entity.data.id] = displayName;
55
+ }
56
+ }
57
+ catch { /* skip */ }
58
+ }
59
+ setEntityNames({ ...names });
60
+ })
61
+ .catch(() => setEntityNames(names));
62
+ }
63
+ else {
64
+ setEntityNames(names);
65
+ }
66
+ }, [result, ctx.entities, apiBase]);
67
+ if (!result)
68
+ return null;
69
+ return (_jsxs("div", { className: "mt-3 space-y-3", children: [_jsxs("div", { className: `flex items-center gap-2 px-3 py-2 rounded text-sm ${result.success
70
+ ? 'bg-green-50 dark:bg-green-900/20 text-green-700 dark:text-green-300'
71
+ : 'bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300'}`, children: [_jsx("span", { children: result.success ? '\u2705' : '\u274C' }), _jsx("span", { className: "font-medium", children: result.success ? 'Success' : 'Failed' }), result.error && _jsxs("span", { className: "text-xs ml-2", children: ["\u2014 ", result.error] })] }), result.preconditions && result.preconditions.length > 0 && (_jsxs("div", { className: "text-xs space-y-1", children: [_jsx("div", { className: "font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide", children: "Preconditions" }), result.preconditions.map((p, i) => (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { children: p.passed ? '\u2705' : '\u274C' }), _jsx("span", { className: p.passed ? 'text-gray-600 dark:text-gray-300' : 'text-red-600 dark:text-red-400', children: p.precondition }), p.reason && _jsxs("span", { className: "text-gray-400 ml-1", children: ["(", p.reason, ")"] })] }, i)))] })), result.steps && result.steps.length > 0 && (_jsxs("div", { className: "text-xs space-y-1", children: [_jsxs("div", { className: "font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide", children: ["Steps (", result.stepsExecuted, " executed", result.stepsSkipped > 0 ? `, ${result.stepsSkipped} skipped` : '', ")"] }), result.steps.map((s, i) => (_jsxs("div", { className: `flex items-start gap-1.5 ${s.skipped ? 'opacity-50' : ''}`, children: [_jsx("span", { className: "mt-0.5", children: s.skipped ? '\u25CB' : '\u2705' }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("span", { className: "text-gray-600 dark:text-gray-300", children: s.step }), s.convention && _jsxs("span", { className: "ml-1 text-gray-400", children: ["(", s.convention, ")"] }), s.code && (_jsx("pre", { className: "mt-0.5 px-2 py-1 bg-gray-900 text-green-400 rounded text-xs overflow-x-auto", children: s.code }))] })] }, i)))] })), result.eventsPublished && result.eventsPublished.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1", children: result.eventsPublished.map((event, i) => (_jsx("span", { className: "text-xs px-2 py-0.5 bg-orange-50 dark:bg-orange-900/20 text-orange-700 dark:text-orange-300 rounded", children: event }, i))) })), result.returnValue != null && (_jsxs("div", { children: [_jsx("div", { className: "text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide mb-1", children: "Result" }), renderReturnValue(result.returnValue, entityNames)] }))] }));
72
+ }
73
+ function renderReturnValue(value, entityNames) {
74
+ if (value == null)
75
+ return _jsx("span", { className: "text-xs text-gray-400 italic", children: "null" });
76
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
77
+ return _jsx("span", { className: "text-sm text-gray-800 dark:text-gray-200", children: String(value) });
78
+ }
79
+ if (Array.isArray(value)) {
80
+ return value.length === 0
81
+ ? _jsx("span", { className: "text-xs text-gray-400 italic", children: "Empty list" })
82
+ : _jsxs("div", { className: "text-xs text-gray-600 dark:text-gray-300", children: [value.length, " items"] });
83
+ }
84
+ if (typeof value === 'object') {
85
+ const entries = Object.entries(value);
86
+ if (entries.length === 0)
87
+ return _jsx("span", { className: "text-xs text-gray-400 italic", children: "Empty" });
88
+ return (_jsx("div", { className: "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden", children: _jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [_jsx("thead", { className: "bg-gray-50 dark:bg-gray-700", children: _jsxs("tr", { children: [_jsx("th", { className: "px-4 py-2 text-left text-xs font-semibold text-gray-700 dark:text-gray-200 uppercase", children: "Item" }), _jsx("th", { className: "px-4 py-2 text-left text-xs font-semibold text-gray-700 dark:text-gray-200 uppercase", children: "Value" })] }) }), _jsx("tbody", { className: "divide-y divide-gray-200 dark:divide-gray-700", children: entries.map(([key, val]) => (_jsxs("tr", { className: "hover:bg-gray-50 dark:hover:bg-gray-700", children: [_jsx("td", { className: "px-4 py-2 text-sm text-gray-800 dark:text-gray-200", children: entityNames[key] || key }), _jsx("td", { className: "px-4 py-2 text-sm font-medium text-gray-900 dark:text-gray-100", children: typeof val === 'object' ? JSON.stringify(val) : String(val) })] }, key))) })] }) }));
89
+ }
90
+ return _jsx("pre", { className: "text-xs text-gray-600 dark:text-gray-300", children: JSON.stringify(value, null, 2) });
91
+ }
92
+ //# sourceMappingURL=OperationResultView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationResultView.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/OperationResultView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * OperationView — View for executing service operations.
3
+ *
4
+ * Shows parameter selectors, execute button, and result display.
5
+ * Used as a pluggable slot in ViewRouter for operation-type views.
6
+ */
7
+ export interface OperationViewProps {
8
+ view: {
9
+ name: string;
10
+ type: 'operation';
11
+ description?: string;
12
+ service: string;
13
+ operation: string;
14
+ parameters?: Record<string, any>;
15
+ requires?: string[];
16
+ returns?: string;
17
+ source?: 'service' | 'controller';
18
+ };
19
+ }
20
+ export declare function OperationView({ view }: OperationViewProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=OperationView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationView.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/OperationView.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,WAAW,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;KACnC,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,kBAAkB,2CAgCzD"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { OperationExecutor } from './OperationExecutor.js';
3
+ import { humanizeFieldName } from '../../core/entity-display.js';
4
+ export function OperationView({ view }) {
5
+ return (_jsxs("div", { className: "flex flex-col h-full", children: [_jsx("div", { className: "px-6 py-4 bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-blue-500", children: "\\u26A1" }), _jsx("h2", { className: "text-lg font-semibold text-gray-800 dark:text-gray-100", children: humanizeFieldName(view.operation) }), view.returns && (_jsxs("span", { className: "text-xs px-2 py-0.5 bg-gray-200 dark:bg-gray-600 text-gray-600 dark:text-gray-300 rounded font-mono", children: ["\u2192 ", view.returns] }))] }) }), _jsx("div", { className: "flex-1 overflow-auto p-6", children: _jsx("div", { className: "max-w-lg", children: _jsx(OperationExecutor, { serviceName: view.service, operationName: view.operation, parameters: view.parameters, requires: view.requires, source: view.source || 'service' }) }) })] }));
6
+ }
7
+ //# sourceMappingURL=OperationView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationView.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/OperationView.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAgBjE,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAsB;IACxD,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aAEnC,cAAK,SAAS,EAAC,qFAAqF,YAClG,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,eAAe,wBAAc,EAC7C,aAAI,SAAS,EAAC,wDAAwD,YACnE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAC/B,EACJ,IAAI,CAAC,OAAO,IAAI,CACf,gBAAM,SAAS,EAAC,qGAAqG,wBAC3G,IAAI,CAAC,OAAO,IACf,CACR,IACG,GACF,EAGN,cAAK,SAAS,EAAC,0BAA0B,YACvC,cAAK,SAAS,EAAC,UAAU,YACvB,KAAC,iBAAiB,IAChB,WAAW,EAAE,IAAI,CAAC,OAAO,EACzB,aAAa,EAAE,IAAI,CAAC,SAAS,EAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,GAChC,GACE,GACF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useRuntimeContext } from '../context.js';
3
- import { getEntityDisplayName } from '../../core/entity-display.js';
3
+ import { getEntityDisplayName, getEntityId, findEntityById } from '../../core/entity-display.js';
4
4
  export function RelationshipField({ name, relationship, value, onChange, required, readOnly }) {
5
5
  const ctx = useRuntimeContext();
6
6
  const rel = relationship;
@@ -15,17 +15,17 @@ export function RelationshipField({ name, relationship, value, onChange, require
15
15
  }
16
16
  if (relType === 'hasOne') {
17
17
  const display = value
18
- ? getEntityDisplayName(targetEntities.find((e) => e.data?.id === value || e.id === value), ctx.entities)
18
+ ? getEntityDisplayName(findEntityById(targetEntities, value), ctx.entities)
19
19
  : 'None';
20
20
  return (_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: name }), _jsx("div", { className: "px-3 py-2 bg-gray-100 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md text-sm text-gray-600 dark:text-gray-400", children: display })] }));
21
21
  }
22
22
  // belongsTo — dropdown select
23
23
  if (readOnly) {
24
24
  const display = value
25
- ? getEntityDisplayName(targetEntities.find((e) => e.data?.id === value || e.id === value), ctx.entities)
25
+ ? getEntityDisplayName(findEntityById(targetEntities, value), ctx.entities)
26
26
  : '-';
27
27
  return (_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: name }), _jsx("div", { className: "px-3 py-2 bg-gray-100 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md text-sm text-gray-900 dark:text-gray-100", children: display })] }));
28
28
  }
29
- return (_jsxs("div", { children: [_jsxs("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: [name, required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] }), _jsxs("select", { value: value || '', onChange: (e) => onChange?.(e.target.value || null), disabled: isLoading, className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200", children: [_jsxs("option", { value: "", children: ["-- Select ", targetModel, " --"] }), targetEntities.map((entity) => (_jsx("option", { value: entity.data?.id || entity.id, children: getEntityDisplayName(entity, ctx.entities) }, entity.id)))] })] }));
29
+ return (_jsxs("div", { children: [_jsxs("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: [name, required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] }), _jsxs("select", { value: value || '', onChange: (e) => onChange?.(e.target.value || null), disabled: isLoading, className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200", children: [_jsxs("option", { value: "", children: ["-- Select ", targetModel, " --"] }), targetEntities.map((entity) => (_jsx("option", { value: getEntityId(entity), children: getEntityDisplayName(entity, ctx.entities) }, entity.id)))] })] }));
30
30
  }
31
31
  //# sourceMappingURL=RelationshipField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipField.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/RelationshipField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RelationshipField.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/RelationshipField.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAWjG,MAAM,UAAU,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAA0B;IACnH,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAEhC,MAAM,GAAG,GAAG,YAAmB,CAAC;IAChC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC;IACjD,MAAM,cAAc,GAAG,GAAG,WAAW,YAAY,CAAC;IAClD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAExC,wBAAwB;IACxB,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAEnG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,CACL,0BACE,gBAAO,SAAS,EAAC,iEAAiE,YAC/E,IAAI,GACC,EACR,eAAK,SAAS,EAAC,wIAAwI,aACpJ,KAAK,OAAG,WAAW,IAAI,OAAO,IAC3B,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK;YACnB,CAAC,CAAC,oBAAoB,CAClB,cAAc,CAAC,cAAuB,EAAE,KAAe,CAAC,EACxD,GAAG,CAAC,QAAQ,CACb;YACH,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO,CACL,0BACE,gBAAO,SAAS,EAAC,iEAAiE,YAC/E,IAAI,GACC,EACR,cAAK,SAAS,EAAC,wIAAwI,YACpJ,OAAO,GACJ,IACF,CACP,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,KAAK;YACnB,CAAC,CAAC,oBAAoB,CAClB,cAAc,CAAC,cAAuB,EAAE,KAAe,CAAC,EACxD,GAAG,CAAC,QAAQ,CACb;YACH,CAAC,CAAC,GAAG,CAAC;QAER,OAAO,CACL,0BACE,gBAAO,SAAS,EAAC,iEAAiE,YAC/E,IAAI,GACC,EACR,cAAK,SAAS,EAAC,wIAAwI,YACpJ,OAAO,GACJ,IACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,iEAAiE,aAC/E,IAAI,EACJ,QAAQ,IAAI,eAAM,SAAS,EAAC,qCAAqC,kBAAS,IACrE,EACR,kBACE,KAAK,EAAG,KAAgB,IAAI,EAAE,EAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,EACnD,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAC,iKAAiK,aAE3K,kBAAQ,KAAK,EAAC,EAAE,2BAAY,WAAW,WAAa,EAClD,cAAwB,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAC9C,iBAAwB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,YAC/C,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IADhC,MAAM,CAAC,EAAE,CAEb,CACV,CAAC,IACK,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeView.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/RuntimeView.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,IAAI,EAAE,GAAG,CAAC;IACV,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvF,yEAAyE;IACzE,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,gBAAgB,2CAoPrI"}
1
+ {"version":3,"file":"RuntimeView.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/RuntimeView.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,IAAI,EAAE,GAAG,CAAC;IACV,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvF,yEAAyE;IACzE,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,gBAAgB,2CAySrI"}
@@ -7,9 +7,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
7
  *
8
8
  * Ported from specverse-app-demo/frontend-react/src/components/views/RuntimeViewNew.tsx
9
9
  */
10
- import { useEffect, useState, useMemo } from 'react';
10
+ import { useEffect, useState, useMemo, useCallback } from 'react';
11
11
  import { useRuntimeContext } from '../context.js';
12
- import { getEntityDisplayName } from '../../core/entity-display.js';
12
+ import { getEntityDisplayName, getEntityId, formatDisplayValue } from '../../core/entity-display.js';
13
13
  import { detectPattern } from '../../core/pattern-engine.js';
14
14
  import { createUniversalTailwindAdapter } from '../../tailwind/universal-adapter.js';
15
15
  export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigate, patternAdapter: externalAdapter }) {
@@ -18,7 +18,23 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
18
18
  const [selectedEntityId, setSelectedEntityId] = useState(initialEntityId || null);
19
19
  // Get data from RuntimeViewProvider context
20
20
  const ctx = useRuntimeContext();
21
- const { entities, modelSchemas } = ctx;
21
+ // Local state for entity/schema data (populated by ModelDataFetcher children)
22
+ const [fetchedEntities, setFetchedEntities] = useState({});
23
+ const [fetchedSchemas, setFetchedSchemas] = useState({});
24
+ const reportEntities = useCallback((model, data) => {
25
+ setFetchedEntities(prev => {
26
+ if (prev[model] === data)
27
+ return prev; // same ref — skip
28
+ return { ...prev, [model]: data };
29
+ });
30
+ }, []);
31
+ const reportSchema = useCallback((model, data) => {
32
+ setFetchedSchemas(prev => {
33
+ if (prev[model] === data)
34
+ return prev;
35
+ return { ...prev, [model]: data };
36
+ });
37
+ }, []);
22
38
  // Create tailwind adapter
23
39
  const tailwindAdapter = useMemo(() => createUniversalTailwindAdapter(), []);
24
40
  // Determine primary model from view spec
@@ -47,7 +63,7 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
47
63
  if (processed.has(name))
48
64
  return;
49
65
  processed.add(name);
50
- const schema = modelSchemas[name];
66
+ const schema = fetchedSchemas[name];
51
67
  if (schema?.relationships) {
52
68
  for (const rel of Object.values(schema.relationships)) {
53
69
  const target = rel?.targetModel || rel?.model;
@@ -62,33 +78,23 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
62
78
  for (const m of [...models])
63
79
  processModel(m);
64
80
  return [...models];
65
- }, [primaryModel, view, modelSchemas]);
66
- // Fetch schemas and entities for all detected models
67
- for (const modelName of allModels) {
68
- const controllerName = `${modelName}Controller`;
69
- ctx.useEntitiesQuery(controllerName, modelName);
70
- ctx.useModelSchemaQuery(modelName);
71
- }
72
- // Build model data from context
73
- const modelData = useMemo(() => {
74
- const result = {};
75
- for (const modelName of allModels) {
76
- result[modelName] = entities[modelName] || [];
77
- }
78
- return result;
79
- }, [allModels, entities]);
81
+ }, [primaryModel, view, fetchedSchemas]);
82
+ // Fetch schemas and entities for all detected models via child components
83
+ // (hooks can't be called in loops — each model gets its own component)
84
+ // Build model data from fetched state
85
+ const modelData = fetchedEntities;
80
86
  // Primary entities
81
- const primaryEntities = useMemo(() => (primaryModel ? entities[primaryModel] || [] : []), [primaryModel, entities]);
82
- // Selected entity
87
+ const primaryEntities = useMemo(() => (primaryModel ? fetchedEntities[primaryModel] || [] : []), [primaryModel, fetchedEntities]);
88
+ // Selected entity — match by UUID
83
89
  const selectedEntity = useMemo(() => {
84
90
  if (!selectedEntityId || !primaryEntities.length)
85
91
  return null;
86
- return primaryEntities.find((e) => e.id === selectedEntityId) || null;
92
+ return primaryEntities.find((e) => getEntityId(e) === selectedEntityId) || null;
87
93
  }, [selectedEntityId, primaryEntities]);
88
94
  // Auto-select first entity for detail/dashboard views
89
95
  useEffect(() => {
90
96
  if ((view.type === 'detail' || view.type === 'dashboard') && primaryEntities.length > 0 && !selectedEntityId) {
91
- setSelectedEntityId(primaryEntities[0].id);
97
+ setSelectedEntityId(getEntityId(primaryEntities[0]));
92
98
  }
93
99
  }, [view.type, primaryEntities, selectedEntityId]);
94
100
  // Sync with external entity ID
@@ -125,7 +131,8 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
125
131
  >
126
132
  ${primaryEntities.map((entity) => {
127
133
  const displayName = getEntityDisplayName(entity, modelData);
128
- return `<option value="${entity.id}" ${entity.id === selectedEntityId ? 'selected' : ''}>${displayName}</option>`;
134
+ const eid = getEntityId(entity);
135
+ return `<option value="${eid}" ${eid === selectedEntityId ? 'selected' : ''}>${displayName}</option>`;
129
136
  }).join('')}
130
137
  </select>
131
138
  </div>
@@ -148,7 +155,7 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
148
155
  pattern,
149
156
  viewSpec: view,
150
157
  modelData,
151
- modelSchemas,
158
+ modelSchemas: fetchedSchemas,
152
159
  primaryModel,
153
160
  selectedEntity,
154
161
  primaryEntities,
@@ -163,7 +170,7 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
163
170
  }
164
171
  else {
165
172
  // Built-in rendering using tailwind adapter directly
166
- html += renderBuiltInPattern(patternResult, view, modelData, modelSchemas, primaryModel, selectedEntity, primaryEntities, tailwindAdapter);
173
+ html += renderBuiltInPattern(patternResult, view, modelData, fetchedSchemas, primaryModel, selectedEntity, primaryEntities, tailwindAdapter);
167
174
  }
168
175
  setRenderedHtml(html);
169
176
  setError(null);
@@ -172,7 +179,7 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
172
179
  console.error('Pattern-based rendering error:', err);
173
180
  setError(err instanceof Error ? err.message : 'Unknown error');
174
181
  }
175
- }, [view, modelData, modelSchemas, selectedEntity, primaryModel, primaryEntities, selectedEntityId, externalAdapter, tailwindAdapter, onNavigate]);
182
+ }, [view, modelData, fetchedSchemas, selectedEntity, primaryModel, primaryEntities, selectedEntityId, externalAdapter, tailwindAdapter, onNavigate]);
176
183
  // DOM event handlers for navigation
177
184
  useEffect(() => {
178
185
  // Entity selector change
@@ -229,20 +236,73 @@ export function RuntimeView({ view, selectedEntityId: initialEntityId, onNavigat
229
236
  return () => handlers.forEach(([el, h]) => el.removeEventListener('click', h));
230
237
  }
231
238
  }, [renderedHtml, onNavigate]);
239
+ // Tab switching for tabbed lists (e.g., related entity tabs in detail view)
240
+ useEffect(() => {
241
+ const tabButtons = document.querySelectorAll('[data-tab-button]');
242
+ if (tabButtons.length === 0)
243
+ return;
244
+ const handlers = [];
245
+ tabButtons.forEach((button) => {
246
+ const handler = () => {
247
+ const tabId = button.getAttribute('data-tab-button');
248
+ if (!tabId)
249
+ return;
250
+ // Find the tab group
251
+ const tabGroup = button.closest('[data-tab-group]');
252
+ if (!tabGroup)
253
+ return;
254
+ const groupId = tabGroup.getAttribute('data-tab-group');
255
+ // Update button styles
256
+ tabGroup.querySelectorAll('[data-tab-button]').forEach((btn) => {
257
+ const isActive = btn.getAttribute('data-tab-button') === tabId;
258
+ btn.className = `px-4 py-3 text-sm font-medium transition-colors focus:outline-none ${isActive
259
+ ? 'bg-white dark:bg-gray-800 text-blue-600 dark:text-blue-400 border-b-2 border-blue-600 dark:border-blue-400'
260
+ : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-800'}`;
261
+ });
262
+ // Show/hide panels
263
+ const panels = document.querySelectorAll(`[data-tab-panel]`);
264
+ panels.forEach((panel) => {
265
+ // Only toggle panels belonging to this tab group
266
+ const panelId = panel.getAttribute('data-tab-panel') || '';
267
+ if (panelId.startsWith(groupId || '___')) {
268
+ panel.classList.toggle('hidden', panelId !== tabId);
269
+ }
270
+ });
271
+ };
272
+ button.addEventListener('click', handler);
273
+ handlers.push([button, handler]);
274
+ });
275
+ return () => handlers.forEach(([el, h]) => el.removeEventListener('click', h));
276
+ }, [renderedHtml]);
232
277
  if (error) {
233
278
  return (_jsxs("div", { className: "p-4 bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-700 rounded", children: [_jsx("p", { className: "text-red-800 dark:text-red-200 font-semibold", children: "Pattern Rendering Error" }), _jsx("pre", { className: "text-sm text-red-700 dark:text-red-300 mt-2", children: error })] }));
234
279
  }
235
- return (_jsx("div", { className: "runtime-view-container p-4 h-full overflow-auto", children: _jsx("div", { dangerouslySetInnerHTML: { __html: renderedHtml } }) }));
280
+ return (_jsxs("div", { className: "runtime-view-container p-4 h-full overflow-auto", children: [allModels.map(m => _jsx(ModelDataFetcher, { modelName: m, onEntities: reportEntities, onSchema: reportSchema }, m)), _jsx("div", { dangerouslySetInnerHTML: { __html: renderedHtml } })] }));
281
+ }
282
+ /** Fetches entities and schema for a single model, reports data to parent */
283
+ function ModelDataFetcher({ modelName, onEntities, onSchema }) {
284
+ const ctx = useRuntimeContext();
285
+ const { data: entitiesData } = ctx.useEntitiesQuery(`${modelName}Controller`, modelName);
286
+ const { data: schemaData } = ctx.useModelSchemaQuery(modelName);
287
+ useEffect(() => {
288
+ if (entitiesData)
289
+ onEntities(modelName, entitiesData);
290
+ }, [entitiesData, modelName, onEntities]);
291
+ useEffect(() => {
292
+ if (schemaData)
293
+ onSchema(modelName, schemaData);
294
+ }, [schemaData, modelName, onSchema]);
295
+ return null;
236
296
  }
237
297
  /**
238
298
  * Built-in pattern rendering when no external adapter is provided.
239
299
  * Uses the tailwind adapter to generate HTML for common patterns.
240
300
  */
241
- function renderBuiltInPattern(pattern, view, modelData, modelSchemas, primaryModel, selectedEntity, primaryEntities, tailwindAdapter) {
301
+ function renderBuiltInPattern(pattern, view, modelData, fetchedSchemas, primaryModel, selectedEntity, primaryEntities, tailwindAdapter) {
242
302
  const tw = tailwindAdapter.components;
243
303
  if (pattern.patternId === 'list-view' && primaryModel) {
244
304
  const entities = modelData[primaryModel] || [];
245
- const schema = modelSchemas[primaryModel];
305
+ const schema = fetchedSchemas[primaryModel];
246
306
  const attributes = schema?.attributes || {};
247
307
  const columns = Object.keys(attributes).filter(k => k !== 'id' && k !== 'createdAt' && k !== 'updatedAt');
248
308
  if (entities.length === 0) {
@@ -251,8 +311,8 @@ function renderBuiltInPattern(pattern, view, modelData, modelSchemas, primaryMod
251
311
  const headerRow = columns.map(col => `<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">${col}</th>`).join('');
252
312
  const bodyRows = entities.map((entity) => {
253
313
  const data = entity.data || entity;
254
- const cells = columns.map(col => `<td class="px-6 py-4 text-sm text-gray-900 dark:text-gray-100">${data[col] ?? '-'}</td>`).join('');
255
- return `<tr class="hover:bg-gray-50 dark:hover:bg-gray-800 cursor-pointer" data-nav-entity-id="${entity.id}">${cells}</tr>`;
314
+ const cells = columns.map(col => `<td class="px-6 py-4 text-sm text-gray-900 dark:text-gray-100">${formatDisplayValue(data[col])}</td>`).join('');
315
+ return `<tr class="hover:bg-gray-50 dark:hover:bg-gray-800 cursor-pointer" data-nav-entity-id="${getEntityId(entity)}">${cells}</tr>`;
256
316
  }).join('');
257
317
  return tw.table?.render({
258
318
  properties: { columns },
@@ -261,7 +321,7 @@ function renderBuiltInPattern(pattern, view, modelData, modelSchemas, primaryMod
261
321
  }
262
322
  if (pattern.patternId === 'detail-view' && selectedEntity) {
263
323
  const data = selectedEntity.data || selectedEntity;
264
- const schema = modelSchemas[primaryModel || ''];
324
+ const schema = fetchedSchemas[primaryModel || ''];
265
325
  const attributes = schema?.attributes || {};
266
326
  const fields = Object.keys(attributes).filter(k => k !== 'id' && k !== 'createdAt' && k !== 'updatedAt');
267
327
  return tw.content?.render({
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeView.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/RuntimeView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeView.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/RuntimeView.tsx"],"names":[],"mappings":"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"}
@@ -13,10 +13,16 @@ export interface ViewRouterProps {
13
13
  /** Optional: custom form renderer for interactive views */
14
14
  FormView?: React.ComponentType<{
15
15
  view: any;
16
+ spec?: any;
16
17
  selectedEntityId?: string | null;
18
+ onNavigateToModel?: (modelName: string, entityId?: string) => void;
19
+ }>;
20
+ /** Optional: custom operation view renderer (e.g., service execution UI) */
21
+ OperationView?: React.ComponentType<{
22
+ view: any;
17
23
  }>;
18
24
  /** Optional: pattern adapter for rendering */
19
25
  patternAdapter?: any;
20
26
  }
21
- export declare function ViewRouter({ views: viewsOverride, FormView, patternAdapter }: ViewRouterProps): import("react/jsx-runtime").JSX.Element;
27
+ export declare function ViewRouter({ views: viewsOverride, FormView, OperationView, patternAdapter }: ViewRouterProps): import("react/jsx-runtime").JSX.Element;
22
28
  //# sourceMappingURL=ViewRouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewRouter.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ViewRouter.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAO9D,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAChF,8CAA8C;IAC9C,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAOD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,eAAe,2CAqF7F"}
1
+ {"version":3,"file":"ViewRouter.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ViewRouter.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAO9D,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC,CAAC;IAChK,4EAA4E;IAC5E,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACnD,8CAA8C;IAC9C,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAOD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,eAAe,2CAsI5G"}
@@ -17,9 +17,41 @@ import { useResizableSidebar } from '../hooks/useResizableSidebar.js';
17
17
  const INTERACTIVE_VIEW_TYPES = new Set([
18
18
  'form', 'create', 'edit', 'create-form', 'edit-form',
19
19
  ]);
20
- export function ViewRouter({ views: viewsOverride, FormView, patternAdapter }) {
20
+ export function ViewRouter({ views: viewsOverride, FormView, OperationView, patternAdapter }) {
21
21
  const ctx = useRuntimeContext();
22
- const views = viewsOverride || ctx.views || [];
22
+ const rawViews = viewsOverride || ctx.views || [];
23
+ // Auto-generate missing detail views for models that have list/form but no detail
24
+ // Insert next to the model's other views, not at the end
25
+ const views = useMemo(() => {
26
+ const result = [];
27
+ const existingTypes = new Map();
28
+ const modelLastIndex = new Map();
29
+ for (let i = 0; i < rawViews.length; i++) {
30
+ const v = rawViews[i];
31
+ result.push(v);
32
+ const model = v.model || v.controller?.replace(/Controller$/, '');
33
+ if (!model)
34
+ continue;
35
+ if (!existingTypes.has(model))
36
+ existingTypes.set(model, new Set());
37
+ existingTypes.get(model).add(v.type);
38
+ modelLastIndex.set(model, result.length); // insert point = after last view for this model
39
+ }
40
+ // Insert generated detail views after the model's last existing view
41
+ const toInsert = [];
42
+ for (const [model, types] of existingTypes) {
43
+ if (!types.has('detail') && (types.has('list') || types.has('form'))) {
44
+ const insertAt = modelLastIndex.get(model) || result.length;
45
+ toInsert.push({ index: insertAt, view: { name: `${model}DetailView`, type: 'detail', model, _generated: true } });
46
+ }
47
+ }
48
+ // Insert in reverse order so indices stay valid
49
+ toInsert.sort((a, b) => b.index - a.index);
50
+ for (const { index, view } of toInsert) {
51
+ result.splice(index, 0, view);
52
+ }
53
+ return result;
54
+ }, [rawViews]);
23
55
  const [selectedViewName, setSelectedViewName] = useState(null);
24
56
  const [selectedEntityId, setSelectedEntityId] = useState(null);
25
57
  const { width, isResizing, startResizing } = useResizableSidebar();
@@ -37,25 +69,22 @@ export function ViewRouter({ views: viewsOverride, FormView, patternAdapter }) {
37
69
  return viewModel === model && v.type === type;
38
70
  });
39
71
  }, [views]);
40
- // Navigation handler
72
+ // Navigation handler — finds target view by model + type, with fallbacks
41
73
  const handleNavigate = useCallback((targetViewType, entityId, targetModel) => {
42
74
  if (entityId)
43
75
  setSelectedEntityId(entityId);
44
- if (targetModel) {
45
- // Cross-model navigation
46
- const targetView = findViewByModelAndType(targetModel, targetViewType);
76
+ const model = targetModel || (selectedView?.model || selectedView?.controller?.replace(/Controller$/, ''));
77
+ if (!model)
78
+ return;
79
+ // Try exact type first, then fallbacks
80
+ const fallbacks = targetViewType === 'detail' ? ['detail', 'form', 'list']
81
+ : targetViewType === 'form' ? ['form', 'detail', 'list']
82
+ : [targetViewType, 'list', 'detail'];
83
+ for (const type of fallbacks) {
84
+ const targetView = findViewByModelAndType(model, type);
47
85
  if (targetView) {
48
86
  setSelectedViewName(targetView.name);
49
- }
50
- }
51
- else if (selectedView) {
52
- // Same-model navigation
53
- const currentModel = selectedView.model || selectedView.controller?.replace(/Controller$/, '');
54
- if (currentModel) {
55
- const targetView = findViewByModelAndType(currentModel, targetViewType);
56
- if (targetView) {
57
- setSelectedViewName(targetView.name);
58
- }
87
+ return;
59
88
  }
60
89
  }
61
90
  }, [selectedView, findViewByModelAndType]);
@@ -64,7 +93,17 @@ export function ViewRouter({ views: viewsOverride, FormView, patternAdapter }) {
64
93
  setSelectedEntityId(null);
65
94
  }, []);
66
95
  // Determine rendering strategy
67
- const isInteractive = selectedView && INTERACTIVE_VIEW_TYPES.has(selectedView.type?.toLowerCase());
68
- return (_jsxs("div", { className: "flex h-full bg-gray-900", children: [_jsx(ViewSidebar, { views: views, selectedView: selectedView?.name || null, onSelectView: handleViewSelect }), _jsx(ResizeHandle, { onMouseDown: startResizing, isResizing: isResizing }), _jsx("div", { className: "flex-1 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden flex flex-col ml-3 border border-gray-200 dark:border-gray-700", children: selectedView ? (isInteractive && FormView ? (_jsx(FormView, { view: selectedView, selectedEntityId: selectedEntityId })) : (_jsx(RuntimeView, { view: selectedView, selectedEntityId: selectedEntityId, onNavigate: handleNavigate, patternAdapter: patternAdapter }))) : (_jsx("div", { className: "flex-1 flex items-center justify-center text-gray-500 dark:text-gray-400", children: _jsx("p", { children: "Select a view from the sidebar" }) })) })] }));
96
+ const viewType = selectedView?.type?.toLowerCase();
97
+ const isInteractive = selectedView && INTERACTIVE_VIEW_TYPES.has(viewType);
98
+ const isOperation = viewType === 'operation';
99
+ return (_jsxs("div", { className: "flex h-full bg-gray-900", children: [_jsx(ViewSidebar, { views: views, selectedView: selectedView?.name || null, onSelectView: handleViewSelect }), _jsx(ResizeHandle, { onMouseDown: startResizing, isResizing: isResizing }), _jsx("div", { className: "flex-1 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden flex flex-col ml-3 border border-gray-200 dark:border-gray-700", children: selectedView ? (isOperation && OperationView ? (_jsx(OperationView, { view: selectedView }, selectedView.name)) : isInteractive && FormView ? (_jsx(FormView, { view: selectedView, spec: ctx.spec, selectedEntityId: selectedEntityId, onNavigateToModel: (targetModel, entityId) => {
100
+ const targetView = findViewByModelAndType(targetModel, 'form')
101
+ || findViewByModelAndType(targetModel, 'detail')
102
+ || findViewByModelAndType(targetModel, 'list');
103
+ if (targetView) {
104
+ setSelectedEntityId(entityId || null);
105
+ setSelectedViewName(targetView.name);
106
+ }
107
+ } }, selectedView.name)) : (_jsx(RuntimeView, { view: selectedView, selectedEntityId: selectedEntityId, onNavigate: handleNavigate, patternAdapter: patternAdapter }, selectedView.name))) : (_jsx("div", { className: "flex-1 flex items-center justify-center text-gray-500 dark:text-gray-400", children: _jsx("p", { children: "Select a view from the sidebar" }) })) })] }));
69
108
  }
70
109
  //# sourceMappingURL=ViewRouter.js.map