@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.
- package/README.md +356 -0
- package/dist/runtime/views/core/atomic-components-registry.d.ts +63 -0
- package/dist/runtime/views/core/atomic-components-registry.d.ts.map +1 -0
- package/dist/runtime/views/core/atomic-components-registry.js +822 -0
- package/dist/runtime/views/core/atomic-components-registry.js.map +1 -0
- package/dist/runtime/views/core/composite-pattern-types.d.ts +171 -0
- package/dist/runtime/views/core/composite-pattern-types.d.ts.map +1 -0
- package/dist/runtime/views/core/composite-pattern-types.js +11 -0
- package/dist/runtime/views/core/composite-pattern-types.js.map +1 -0
- package/dist/runtime/views/core/composite-patterns.d.ts +67 -0
- package/dist/runtime/views/core/composite-patterns.d.ts.map +1 -0
- package/dist/runtime/views/core/composite-patterns.js +485 -0
- package/dist/runtime/views/core/composite-patterns.js.map +1 -0
- package/dist/runtime/views/core/entity-display.d.ts +28 -0
- package/dist/runtime/views/core/entity-display.d.ts.map +1 -1
- package/dist/runtime/views/core/entity-display.js +75 -0
- package/dist/runtime/views/core/entity-display.js.map +1 -1
- package/dist/runtime/views/core/index.d.ts +4 -1
- package/dist/runtime/views/core/index.d.ts.map +1 -1
- package/dist/runtime/views/core/index.js +5 -1
- package/dist/runtime/views/core/index.js.map +1 -1
- package/dist/runtime/views/core/pattern-engine.d.ts +2 -2
- package/dist/runtime/views/core/pattern-engine.d.ts.map +1 -1
- package/dist/runtime/views/core/pattern-engine.js.map +1 -1
- package/dist/runtime/views/core/types.d.ts +2 -0
- package/dist/runtime/views/core/types.d.ts.map +1 -1
- package/dist/runtime/views/index.d.ts +5 -2
- package/dist/runtime/views/index.d.ts.map +1 -1
- package/dist/runtime/views/index.js +5 -2
- package/dist/runtime/views/index.js.map +1 -1
- package/dist/runtime/views/react/components/DevShell.d.ts.map +1 -1
- package/dist/runtime/views/react/components/DevShell.js +6 -2
- package/dist/runtime/views/react/components/DevShell.js.map +1 -1
- package/dist/runtime/views/react/components/EntitySelect.d.ts +14 -0
- package/dist/runtime/views/react/components/EntitySelect.d.ts.map +1 -0
- package/dist/runtime/views/react/components/EntitySelect.js +29 -0
- package/dist/runtime/views/react/components/EntitySelect.js.map +1 -0
- package/dist/runtime/views/react/components/EventStream.d.ts +11 -0
- package/dist/runtime/views/react/components/EventStream.d.ts.map +1 -0
- package/dist/runtime/views/react/components/EventStream.js +49 -0
- package/dist/runtime/views/react/components/EventStream.js.map +1 -0
- package/dist/runtime/views/react/components/FieldInput.d.ts +23 -0
- package/dist/runtime/views/react/components/FieldInput.d.ts.map +1 -0
- package/dist/runtime/views/react/components/FieldInput.js +28 -0
- package/dist/runtime/views/react/components/FieldInput.js.map +1 -0
- package/dist/runtime/views/react/components/FormView.d.ts +21 -0
- package/dist/runtime/views/react/components/FormView.d.ts.map +1 -0
- package/dist/runtime/views/react/components/FormView.js +13 -0
- package/dist/runtime/views/react/components/FormView.js.map +1 -0
- package/dist/runtime/views/react/components/ModelManager.d.ts +6 -2
- package/dist/runtime/views/react/components/ModelManager.d.ts.map +1 -1
- package/dist/runtime/views/react/components/ModelManager.js +166 -61
- package/dist/runtime/views/react/components/ModelManager.js.map +1 -1
- package/dist/runtime/views/react/components/ModelSelector.d.ts.map +1 -1
- package/dist/runtime/views/react/components/ModelSelector.js +4 -1
- package/dist/runtime/views/react/components/ModelSelector.js.map +1 -1
- package/dist/runtime/views/react/components/OperationExecutor.d.ts +15 -0
- package/dist/runtime/views/react/components/OperationExecutor.d.ts.map +1 -0
- package/dist/runtime/views/react/components/OperationExecutor.js +86 -0
- package/dist/runtime/views/react/components/OperationExecutor.js.map +1 -0
- package/dist/runtime/views/react/components/OperationResultView.d.ts +10 -0
- package/dist/runtime/views/react/components/OperationResultView.d.ts.map +1 -0
- package/dist/runtime/views/react/components/OperationResultView.js +92 -0
- package/dist/runtime/views/react/components/OperationResultView.js.map +1 -0
- package/dist/runtime/views/react/components/OperationView.d.ts +21 -0
- package/dist/runtime/views/react/components/OperationView.d.ts.map +1 -0
- package/dist/runtime/views/react/components/OperationView.js +7 -0
- package/dist/runtime/views/react/components/OperationView.js.map +1 -0
- package/dist/runtime/views/react/components/RelationshipField.js +4 -4
- package/dist/runtime/views/react/components/RelationshipField.js.map +1 -1
- package/dist/runtime/views/react/components/RuntimeView.d.ts.map +1 -1
- package/dist/runtime/views/react/components/RuntimeView.js +93 -33
- package/dist/runtime/views/react/components/RuntimeView.js.map +1 -1
- package/dist/runtime/views/react/components/ViewRouter.d.ts +7 -1
- package/dist/runtime/views/react/components/ViewRouter.d.ts.map +1 -1
- package/dist/runtime/views/react/components/ViewRouter.js +57 -18
- package/dist/runtime/views/react/components/ViewRouter.js.map +1 -1
- package/dist/runtime/views/react/hooks/useEventStream.d.ts +29 -0
- package/dist/runtime/views/react/hooks/useEventStream.d.ts.map +1 -0
- package/dist/runtime/views/react/hooks/useEventStream.js +114 -0
- package/dist/runtime/views/react/hooks/useEventStream.js.map +1 -0
- package/dist/runtime/views/react/hooks/useResizableSidebar.d.ts.map +1 -1
- package/dist/runtime/views/react/hooks/useResizableSidebar.js +2 -0
- package/dist/runtime/views/react/hooks/useResizableSidebar.js.map +1 -1
- package/dist/runtime/views/react/index.d.ts +10 -1
- package/dist/runtime/views/react/index.d.ts.map +1 -1
- package/dist/runtime/views/react/index.js +11 -1
- package/dist/runtime/views/react/index.js.map +1 -1
- package/dist/runtime/views/react/react-pattern-adapter.d.ts +235 -0
- package/dist/runtime/views/react/react-pattern-adapter.d.ts.map +1 -0
- package/dist/runtime/views/react/react-pattern-adapter.js +1450 -0
- package/dist/runtime/views/react/react-pattern-adapter.js.map +1 -0
- package/package.json +1 -1
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Extracted from react-pattern-adapter.tsx — the framework-agnostic parts.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
export type CURVEDOperation
|
|
9
|
+
import type { CURVEDOperation } from './composite-pattern-types.js';
|
|
10
|
+
export type { CURVEDOperation };
|
|
11
11
|
/** Protocol mapping for a CURVED operation */
|
|
12
12
|
export interface ProtocolMapping {
|
|
13
13
|
method: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-engine.d.ts","sourceRoot":"","sources":["../../../../src/runtime/views/core/pattern-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,
|
|
1
|
+
{"version":3,"file":"pattern-engine.d.ts","sourceRoot":"","sources":["../../../../src/runtime/views/core/pattern-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,QAAQ,EAAE,YAAY,GAAG,cAAc,GAAG,WAAW,CAAC;IACtD,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CA6B5E,CAAC;AAmBF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,sBAAsB,GAAG,IAAI,CAYxF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC7C,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAiBV;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAc9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-engine.js","sourceRoot":"","sources":["../../../../src/runtime/views/core/pattern-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"pattern-engine.js","sourceRoot":"","sources":["../../../../src/runtime/views/core/pattern-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,5 +78,7 @@ export interface RuntimeViewProviderValue {
|
|
|
78
78
|
views: unknown[];
|
|
79
79
|
/** The full specification */
|
|
80
80
|
spec: Record<string, unknown>;
|
|
81
|
+
/** API base URL for direct fetch calls (e.g., service operations) */
|
|
82
|
+
apiBaseUrl?: string;
|
|
81
83
|
}
|
|
82
84
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/runtime/views/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,gBAAgB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK;QAC/D,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;QAC5B,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,qCAAqC;IACrC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QAC1C,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;QAC1B,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,uCAAuC;IACvC,2BAA2B,EAAE,MAAM;QACjC,WAAW,EAAE,CAAC,IAAI,EAAE;YAClB,cAAc,EAAE,MAAM,CAAC;YACvB,aAAa,EAAE,MAAM,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,yCAAyC;IACzC,0BAA0B,EAAE,MAAM;QAChC,WAAW,EAAE,CAAC,IAAI,EAAE;YAClB,cAAc,EAAE,MAAM,CAAC;YACvB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,8BAA8B;IAC9B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/runtime/views/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,gBAAgB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK;QAC/D,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;QAC5B,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,qCAAqC;IACrC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QAC1C,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;QAC1B,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,uCAAuC;IACvC,2BAA2B,EAAE,MAAM;QACjC,WAAW,EAAE,CAAC,IAAI,EAAE;YAClB,cAAc,EAAE,MAAM,CAAC;YACvB,aAAa,EAAE,MAAM,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,yCAAyC;IACzC,0BAA0B,EAAE,MAAM;QAChC,WAAW,EAAE,CAAC,IAAI,EAAE;YAClB,cAAc,EAAE,MAAM,CAAC;YACvB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,8BAA8B;IAC9B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -4,8 +4,11 @@
|
|
|
4
4
|
* Framework-agnostic view engine — core utilities for rendering
|
|
5
5
|
* SpecVerse views from spec + data at runtime.
|
|
6
6
|
*/
|
|
7
|
-
export { getEntityDisplayName, humanizeFieldName, } from './core/entity-display.js';
|
|
8
|
-
export { classifyFields, isAutoField, isMetadataField, isRelationshipField, METADATA_FIELDS, type FieldClassification, } from './core/field-classification.js';
|
|
7
|
+
export { getEntityDisplayName, getEntityId, findEntityById, formatDisplayValue, formatDateTimeForInput, formatDateForInput, getForeignKeyName, humanizeFieldName, } from './core/entity-display.js';
|
|
8
|
+
export { classifyFields, isAutoField, isMetadataField, isRelationshipField, isFieldRequired, getFieldDefaultValue, initializeFormData, METADATA_FIELDS, type FieldClassification, } from './core/field-classification.js';
|
|
9
9
|
export { detectPattern, inferFieldsFromSchema, inferFieldsFromModel, CURVED_PROTOCOL_MAPPING, type PatternDetectionResult, } from './core/pattern-engine.js';
|
|
10
10
|
export type { ViewEngineConfig, ViewRenderContext, RuntimeViewProviderValue, } from './core/types.js';
|
|
11
|
+
export { COMPOSITE_VIEW_PATTERNS, FORM_VIEW_PATTERN, LIST_VIEW_PATTERN, DETAIL_VIEW_PATTERN, DASHBOARD_VIEW_PATTERN, getPattern, getPatternsByCategory, getPatternsByTag, getPatternIds, hasPattern, } from './core/composite-patterns.js';
|
|
12
|
+
export type { CompositeViewPattern, CompositePatternRegistry, CURVEDOperation, ViewCategory, LayoutStrategy, DataSource, SectionDefinition, DataOperation, RelationshipBinding, PatternContext, } from './core/composite-pattern-types.js';
|
|
13
|
+
export { ATOMIC_COMPONENTS_REGISTRY, getComponentDefinition, getComponentsByCategory, isValidComponentType, getAllComponentTypes, TOTAL_COMPONENT_COUNT, type AtomicComponentDefinition, } from './core/atomic-components-registry.js';
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/views/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/views/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,UAAU,GACX,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,sCAAsC,CAAC"}
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* SpecVerse views from spec + data at runtime.
|
|
6
6
|
*/
|
|
7
7
|
// Core utilities
|
|
8
|
-
export { getEntityDisplayName, humanizeFieldName, } from './core/entity-display.js';
|
|
9
|
-
export { classifyFields, isAutoField, isMetadataField, isRelationshipField, METADATA_FIELDS, } from './core/field-classification.js';
|
|
8
|
+
export { getEntityDisplayName, getEntityId, findEntityById, formatDisplayValue, formatDateTimeForInput, formatDateForInput, getForeignKeyName, humanizeFieldName, } from './core/entity-display.js';
|
|
9
|
+
export { classifyFields, isAutoField, isMetadataField, isRelationshipField, isFieldRequired, getFieldDefaultValue, initializeFormData, METADATA_FIELDS, } from './core/field-classification.js';
|
|
10
10
|
export { detectPattern, inferFieldsFromSchema, inferFieldsFromModel, CURVED_PROTOCOL_MAPPING, } from './core/pattern-engine.js';
|
|
11
|
+
// Composite view patterns and component registry
|
|
12
|
+
export { COMPOSITE_VIEW_PATTERNS, FORM_VIEW_PATTERN, LIST_VIEW_PATTERN, DETAIL_VIEW_PATTERN, DASHBOARD_VIEW_PATTERN, getPattern, getPatternsByCategory, getPatternsByTag, getPatternIds, hasPattern, } from './core/composite-patterns.js';
|
|
13
|
+
export { ATOMIC_COMPONENTS_REGISTRY, getComponentDefinition, getComponentsByCategory, isValidComponentType, getAllComponentTypes, TOTAL_COMPONENT_COUNT, } from './core/atomic-components-registry.js';
|
|
11
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/views/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/views/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,0BAA0B,CAAC;AAQlC,iDAAiD;AACjD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,UAAU,GACX,MAAM,8BAA8B,CAAC;AAetC,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,sCAAsC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevShell.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/DevShell.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DevShell.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/DevShell.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAChF,wCAAwC;IACxC,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAeD,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAA0B,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,aAAa,2CA+F9G"}
|
|
@@ -10,12 +10,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
import React, { useState } from 'react';
|
|
11
11
|
import { useTheme } from '../hooks/useTheme.js';
|
|
12
12
|
import { ViewRouter } from './ViewRouter.js';
|
|
13
|
+
import { FormView as DefaultFormView } from './FormView.js';
|
|
14
|
+
import { OperationView as DefaultOperationView } from './OperationView.js';
|
|
13
15
|
import { ModelSelector } from './ModelSelector.js';
|
|
16
|
+
import { EventStream } from './EventStream.js';
|
|
14
17
|
const TABS = [
|
|
15
18
|
{ id: 'views', label: 'Views' },
|
|
16
19
|
{ id: 'models', label: 'Models' },
|
|
20
|
+
{ id: 'events', label: 'Events' },
|
|
17
21
|
];
|
|
18
|
-
export function DevShell({ devSpec, appSpec, FormView, patternAdapter, title }) {
|
|
22
|
+
export function DevShell({ devSpec, appSpec, FormView = DefaultFormView, patternAdapter, title }) {
|
|
19
23
|
const { theme, toggleTheme, isDark } = useTheme();
|
|
20
24
|
const [activeTab, setActiveTab] = useState('views');
|
|
21
25
|
// Combine views from both specs
|
|
@@ -50,6 +54,6 @@ export function DevShell({ devSpec, appSpec, FormView, patternAdapter, title })
|
|
|
50
54
|
const appTitle = title || appSpec?.metadata?.name || 'SpecVerse Dev';
|
|
51
55
|
return (_jsxs("div", { className: "flex flex-col h-screen bg-gray-900 text-white overflow-hidden", children: [_jsxs("header", { className: "bg-gray-800 border-b border-gray-700 px-4 py-3 flex items-center justify-between flex-shrink-0", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("h1", { className: "text-lg font-semibold text-white", children: appTitle }), _jsx("span", { className: "text-xs text-gray-400 bg-gray-700 px-2 py-0.5 rounded", children: "dev" })] }), _jsx("div", { className: "flex items-center gap-3", children: _jsx("button", { onClick: toggleTheme, className: "px-3 py-1.5 text-sm bg-gray-700 hover:bg-gray-600 text-gray-300 rounded transition-colors", children: isDark ? 'Light' : 'Dark' }) })] }), _jsx("div", { className: "bg-gray-800 px-4 flex gap-1 flex-shrink-0", children: TABS.map((tab) => (_jsx("button", { onClick: () => setActiveTab(tab.id), className: `px-4 py-2 text-sm font-medium rounded-t-lg transition-colors ${activeTab === tab.id
|
|
52
56
|
? 'bg-gray-900 text-white'
|
|
53
|
-
: 'bg-gray-700 text-gray-300 hover:bg-gray-650 hover:text-gray-200'}`, children: tab.label }, tab.id))) }), _jsxs("main", { className: "flex-1 p-4 overflow-hidden", children: [activeTab === 'views' && (_jsx(ViewRouter, { views: allViews, FormView: FormView, patternAdapter: patternAdapter })), activeTab === 'models' && (_jsx(ModelSelector, { models: models }))] })] }));
|
|
57
|
+
: 'bg-gray-700 text-gray-300 hover:bg-gray-650 hover:text-gray-200'}`, children: tab.label }, tab.id))) }), _jsxs("main", { className: "flex-1 p-4 overflow-hidden", children: [activeTab === 'views' && (_jsx(ViewRouter, { views: allViews, FormView: FormView, OperationView: DefaultOperationView, patternAdapter: patternAdapter })), activeTab === 'models' && (_jsx(ModelSelector, { models: models })), activeTab === 'events' && (_jsx(EventStream, {}))] })] }));
|
|
54
58
|
}
|
|
55
59
|
//# sourceMappingURL=DevShell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevShell.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/DevShell.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DevShell.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/DevShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EntitySelect — Dropdown for UUID params that reference an entity.
|
|
3
|
+
*
|
|
4
|
+
* Uses RuntimeViewProvider context for entity fetching.
|
|
5
|
+
*/
|
|
6
|
+
export interface EntitySelectProps {
|
|
7
|
+
modelName: string;
|
|
8
|
+
value: string;
|
|
9
|
+
onChange: (value: string) => void;
|
|
10
|
+
compact?: boolean;
|
|
11
|
+
filterBy?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export declare function EntitySelect({ modelName, value, onChange, compact, filterBy }: EntitySelectProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=EntitySelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitySelect.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/EntitySelect.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAMD,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAe,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA6BxG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRuntimeContext } from '../context.js';
|
|
3
|
+
import { getEntityDisplayName, getEntityId } from '../../core/entity-display.js';
|
|
4
|
+
const inputClass = (compact) => compact
|
|
5
|
+
? 'w-full px-2 py-1 text-xs bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded focus:outline-none focus:ring-1 focus:ring-blue-500'
|
|
6
|
+
: 'w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500';
|
|
7
|
+
export function EntitySelect({ modelName, value, onChange, compact = false, filterBy }) {
|
|
8
|
+
const ctx = useRuntimeContext();
|
|
9
|
+
const controllerName = `${modelName}Controller`;
|
|
10
|
+
const { data: allEntities = [] } = ctx.useEntitiesQuery(controllerName, modelName);
|
|
11
|
+
const entities = filterBy
|
|
12
|
+
? allEntities.filter(e => {
|
|
13
|
+
for (const [fk, fkValue] of Object.entries(filterBy)) {
|
|
14
|
+
if (!fkValue)
|
|
15
|
+
continue;
|
|
16
|
+
if (!(fk in (e.data || {})))
|
|
17
|
+
continue;
|
|
18
|
+
if (e.data?.[fk] !== fkValue)
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
})
|
|
23
|
+
: allEntities;
|
|
24
|
+
return (_jsxs("select", { value: value || '', onChange: e => onChange(e.target.value), className: inputClass(compact), children: [_jsxs("option", { value: "", children: ["Select ", modelName, "...", filterBy && Object.values(filterBy).some(v => v) ? ` (${entities.length} matching)` : ''] }), entities.map((entity) => {
|
|
25
|
+
const id = getEntityId(entity);
|
|
26
|
+
return (_jsxs("option", { value: id, children: [getEntityDisplayName(entity, ctx.entities), " (", id?.slice(0, 8), "...)"] }, id));
|
|
27
|
+
})] }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=EntitySelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitySelect.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/EntitySelect.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAUjF,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO;IAC9C,CAAC,CAAC,4JAA4J;IAC9J,CAAC,CAAC,6LAA6L,CAAC;AAElM,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,QAAQ,EAAqB;IACvG,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,GAAG,SAAS,YAAY,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,QAAQ;QACvB,CAAC,CAAE,WAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAChC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBAAE,SAAS;gBACtC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO;oBAAE,OAAO,KAAK,CAAC;YAC7C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACJ,CAAC,CAAC,WAAoB,CAAC;IAEzB,OAAO,CACL,kBAAQ,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,aACjG,kBAAQ,KAAK,EAAC,EAAE,wBAAS,SAAS,SAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,EAAE,IAAU,EACxI,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;gBAC5B,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC/B,OAAO,CACL,kBAAiB,KAAK,EAAE,EAAE,aACvB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAI,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,aADnD,EAAE,CAEN,CACV,CAAC;YACJ,CAAC,CAAC,IACK,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventStream — Real-time event monitoring
|
|
3
|
+
*
|
|
4
|
+
* Displays events from the backend event bus via WebSocket.
|
|
5
|
+
* Two-panel layout: event type sidebar + event log.
|
|
6
|
+
*/
|
|
7
|
+
export interface EventStreamProps {
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function EventStream({ className }: EventStreamProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=EventStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStream.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/EventStream.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAc,EAAE,EAAE,gBAAgB,2CAsI/D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* EventStream — Real-time event monitoring
|
|
4
|
+
*
|
|
5
|
+
* Displays events from the backend event bus via WebSocket.
|
|
6
|
+
* Two-panel layout: event type sidebar + event log.
|
|
7
|
+
*/
|
|
8
|
+
import { useState, useMemo } from 'react';
|
|
9
|
+
import { useEventStream } from '../hooks/useEventStream.js';
|
|
10
|
+
import { useResizableSidebar } from '../hooks/useResizableSidebar.js';
|
|
11
|
+
import { ResizeHandle } from './ui/ResizeHandle.js';
|
|
12
|
+
export function EventStream({ className = '' }) {
|
|
13
|
+
const { events, isConnected, clearEvents } = useEventStream();
|
|
14
|
+
const [selectedEventType, setSelectedEventType] = useState('all');
|
|
15
|
+
const [expandedEvents, setExpandedEvents] = useState(new Set());
|
|
16
|
+
const { width: sidebarWidth, isResizing, startResizing } = useResizableSidebar({ defaultWidth: 280 });
|
|
17
|
+
const eventTypes = useMemo(() => {
|
|
18
|
+
return [...new Set(events.map(e => e.eventName))].sort();
|
|
19
|
+
}, [events]);
|
|
20
|
+
const filteredEvents = useMemo(() => {
|
|
21
|
+
return selectedEventType === 'all'
|
|
22
|
+
? events
|
|
23
|
+
: events.filter(e => e.eventName === selectedEventType);
|
|
24
|
+
}, [events, selectedEventType]);
|
|
25
|
+
const toggleEvent = (index) => {
|
|
26
|
+
setExpandedEvents(prev => {
|
|
27
|
+
const next = new Set(prev);
|
|
28
|
+
if (next.has(index))
|
|
29
|
+
next.delete(index);
|
|
30
|
+
else
|
|
31
|
+
next.add(index);
|
|
32
|
+
return next;
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
const formatTime = (date) => date.toLocaleTimeString();
|
|
36
|
+
const formatData = (data) => {
|
|
37
|
+
if (!data)
|
|
38
|
+
return '';
|
|
39
|
+
if (typeof data === 'string')
|
|
40
|
+
return data;
|
|
41
|
+
return JSON.stringify(data, null, 2);
|
|
42
|
+
};
|
|
43
|
+
return (_jsxs("div", { className: `flex h-full bg-gray-900 ${className}`, children: [_jsxs("div", { className: "bg-white dark:bg-gray-800 rounded-lg shadow p-4 flex flex-col overflow-hidden border border-gray-200 dark:border-gray-700", style: { width: `${sidebarWidth}px`, minWidth: `${sidebarWidth}px`, maxWidth: `${sidebarWidth}px` }, children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsx("h4", { className: "text-sm font-semibold text-gray-800 dark:text-gray-100 uppercase tracking-wide", children: "Events" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `w-2 h-2 rounded-full ${isConnected ? 'bg-green-500' : 'bg-red-500'}` }), events.length > 0 && (_jsx("button", { onClick: clearEvents, className: "text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300", children: "Clear" }))] })] }), _jsxs("ul", { className: "space-y-0.5 flex-1 overflow-y-auto sidebar-scrollbar", children: [_jsxs("li", { className: `px-2 py-1.5 rounded cursor-pointer border transition-all text-sm ${'all' === selectedEventType
|
|
44
|
+
? 'bg-blue-50 dark:bg-blue-900/30 border-blue-500 dark:border-blue-600 text-blue-700 dark:text-blue-200'
|
|
45
|
+
: 'border-transparent hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300'}`, onClick: () => setSelectedEventType('all'), children: ["All Events (", events.length, ")"] }), eventTypes.map(eventType => (_jsx("li", { className: `px-2 py-1.5 rounded cursor-pointer border transition-all text-sm ${eventType === selectedEventType
|
|
46
|
+
? 'bg-blue-50 dark:bg-blue-900/30 border-blue-500 dark:border-blue-600 text-blue-700 dark:text-blue-200'
|
|
47
|
+
: 'border-transparent hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300'}`, onClick: () => setSelectedEventType(eventType), children: eventType }, eventType)))] })] }), _jsx(ResizeHandle, { onMouseDown: startResizing, isResizing: isResizing }), _jsxs("div", { className: "flex-1 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden flex flex-col border border-gray-200 dark:border-gray-700 ml-3", children: [_jsx("h3", { className: "text-base font-semibold bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-100 px-4 py-3 border-b border-gray-300 dark:border-gray-600", children: selectedEventType === 'all' ? 'All Events' : selectedEventType }), _jsx("div", { className: "flex-1 overflow-y-auto p-2", children: filteredEvents.length === 0 ? (_jsx("div", { className: "text-center py-8 text-gray-400 dark:text-gray-500 italic", children: isConnected ? 'No events yet — perform an operation to see events' : 'Not connected to event stream' })) : (_jsx("div", { className: "space-y-2", children: filteredEvents.map((event, i) => (_jsxs("div", { className: "bg-gray-50 dark:bg-gray-700 border-l-4 border-blue-500 dark:border-blue-400 rounded overflow-hidden", children: [_jsxs("div", { className: "flex items-center gap-2 px-3 py-2 bg-white dark:bg-gray-800 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors", onClick: () => toggleEvent(i), children: [_jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400 min-w-4", children: expandedEvents.has(i) ? '\u25BC' : '\u25B6' }), _jsx("span", { className: "font-semibold text-gray-800 dark:text-gray-100 text-sm flex-1", children: event.eventName }), _jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: formatTime(event.timestamp) })] }), expandedEvents.has(i) && (_jsx("div", { className: "px-3 py-2 bg-gray-50 dark:bg-gray-700", children: event.data && Object.keys(event.data).length > 0 ? (_jsx("pre", { className: "text-xs text-gray-700 dark:text-gray-300 overflow-x-auto whitespace-pre-wrap break-words m-0", children: formatData(event.data) })) : (_jsx("div", { className: "text-xs text-gray-400 dark:text-gray-500 italic", children: "No event data" })) }))] }, i))) })) })] })] }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=EventStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventStream.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/EventStream.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FieldInput — Type-aware input component
|
|
3
|
+
*
|
|
4
|
+
* Renders appropriate input based on field type:
|
|
5
|
+
* - Boolean → checkbox / select
|
|
6
|
+
* - Integer/Number/Decimal → number input
|
|
7
|
+
* - DateTime → datetime-local picker
|
|
8
|
+
* - Date → date picker
|
|
9
|
+
* - Email → email input
|
|
10
|
+
* - Text → textarea
|
|
11
|
+
* - String → text input
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldInputProps {
|
|
14
|
+
name: string;
|
|
15
|
+
typeStr: string;
|
|
16
|
+
value: any;
|
|
17
|
+
onChange: (value: any) => void;
|
|
18
|
+
required?: boolean;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
compact?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function FieldInput({ name, typeStr, value, onChange, required, disabled, compact }: FieldInputProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=FieldInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldInput.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/FieldInput.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAe,EAAE,EAAE,eAAe,2CAgElH"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { humanizeFieldName } from '../../core/entity-display.js';
|
|
3
|
+
const inputClass = (compact) => compact
|
|
4
|
+
? 'w-full px-2 py-1 text-xs bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded focus:outline-none focus:ring-1 focus:ring-blue-500'
|
|
5
|
+
: 'w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100 dark:disabled:bg-gray-800 disabled:cursor-not-allowed';
|
|
6
|
+
export function FieldInput({ name, typeStr, value, onChange, required, disabled, compact = false }) {
|
|
7
|
+
const type = typeStr.toLowerCase();
|
|
8
|
+
if (type.includes('bool')) {
|
|
9
|
+
return compact ? (_jsxs("select", { value: value ?? '', onChange: e => onChange(e.target.value === 'true'), disabled: disabled, className: inputClass(compact), children: [_jsx("option", { value: "", children: "Select..." }), _jsx("option", { value: "true", children: "true" }), _jsx("option", { value: "false", children: "false" })] })) : (_jsxs("div", { className: "flex items-center pt-2", children: [_jsx("input", { type: "checkbox", checked: !!value, onChange: e => onChange(e.target.checked), disabled: disabled, className: "h-4 w-4 text-blue-600 border-gray-300 dark:border-gray-600 rounded focus:ring-blue-500" }), _jsx("span", { className: "ml-2 text-sm text-gray-600 dark:text-gray-300", children: value ? 'Yes' : 'No' })] }));
|
|
10
|
+
}
|
|
11
|
+
if (type.includes('int') || type.includes('number') || type.includes('decimal')) {
|
|
12
|
+
return (_jsx("input", { type: "number", step: type.includes('decimal') ? '0.01' : '1', value: value ?? '', onChange: e => onChange(type.includes('int') ? parseInt(e.target.value) || 0 : parseFloat(e.target.value) || 0), disabled: disabled, required: required, className: inputClass(compact) }));
|
|
13
|
+
}
|
|
14
|
+
if (type.includes('datetime')) {
|
|
15
|
+
return (_jsx("input", { type: "datetime-local", value: value ? new Date(value).toISOString().slice(0, 16) : '', onChange: e => onChange(e.target.value ? new Date(e.target.value).toISOString() : ''), disabled: disabled, required: required, className: inputClass(compact) }));
|
|
16
|
+
}
|
|
17
|
+
if (type.includes('date')) {
|
|
18
|
+
return (_jsx("input", { type: "date", value: value ? new Date(value).toISOString().slice(0, 10) : '', onChange: e => onChange(e.target.value ? new Date(e.target.value).toISOString() : ''), disabled: disabled, required: required, className: inputClass(compact) }));
|
|
19
|
+
}
|
|
20
|
+
if (type.includes('email')) {
|
|
21
|
+
return (_jsx("input", { type: "email", value: value ?? '', onChange: e => onChange(e.target.value), disabled: disabled, required: required, placeholder: humanizeFieldName(name), className: inputClass(compact) }));
|
|
22
|
+
}
|
|
23
|
+
if (type === 'text') {
|
|
24
|
+
return (_jsx("textarea", { value: value ?? '', onChange: e => onChange(e.target.value), disabled: disabled, required: required, rows: compact ? 2 : 3, placeholder: humanizeFieldName(name), className: `${inputClass(compact)} resize-none` }));
|
|
25
|
+
}
|
|
26
|
+
return (_jsx("input", { type: "text", value: value ?? '', onChange: e => onChange(e.target.value), disabled: disabled, required: required, placeholder: `${humanizeFieldName(name)}${typeStr ? ` (${typeStr})` : ''}`, className: inputClass(compact) }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=FieldInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldInput.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/FieldInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FormView — View-spec adapter for ModelManager
|
|
3
|
+
*
|
|
4
|
+
* Takes a view spec (from views: section) and renders ModelManager
|
|
5
|
+
* for the view's model. Used as the FormView slot in ViewRouter.
|
|
6
|
+
*
|
|
7
|
+
* This bridges the gap between:
|
|
8
|
+
* - ViewRouter which has view specs (name, type, model)
|
|
9
|
+
* - ModelManager which takes modelName/controllerName directly
|
|
10
|
+
*/
|
|
11
|
+
export interface FormViewProps {
|
|
12
|
+
view: any;
|
|
13
|
+
spec?: any;
|
|
14
|
+
selectedEntityId?: string | null;
|
|
15
|
+
/** Alias for selectedEntityId (backward compatibility) */
|
|
16
|
+
initialEntityId?: string | null;
|
|
17
|
+
/** Navigate to related model (passed through to ModelManager) */
|
|
18
|
+
onNavigateToModel?: (modelName: string, entityId?: string) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function FormView({ view, selectedEntityId, initialEntityId, onNavigateToModel }: FormViewProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=FormView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormView.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/FormView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,aAAa,2CAuBrG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ModelManager } from './ModelManager.js';
|
|
3
|
+
export function FormView({ view, selectedEntityId, initialEntityId, onNavigateToModel }) {
|
|
4
|
+
const modelName = view.model
|
|
5
|
+
|| (Array.isArray(view.models) ? view.models[0] : null)
|
|
6
|
+
|| view.controller?.replace(/Controller$/, '');
|
|
7
|
+
const controllerName = view.controller || (modelName ? `${modelName}Controller` : undefined);
|
|
8
|
+
if (!modelName) {
|
|
9
|
+
return (_jsxs("div", { className: "flex items-center justify-center h-full text-gray-500 dark:text-gray-400", children: ["No model specified for view: ", view.name] }));
|
|
10
|
+
}
|
|
11
|
+
return (_jsx(ModelManager, { modelName: modelName, controllerName: controllerName, initialEntityId: selectedEntityId || initialEntityId, onNavigateToModel: onNavigateToModel }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=FormView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormView.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/FormView.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYjD,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAiB;IACpG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;WACvB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;WACpD,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,eAAK,SAAS,EAAC,0EAA0E,8CACzD,IAAI,CAAC,IAAI,IACnC,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,YAAY,IACX,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,gBAAgB,IAAI,eAAe,EACpD,iBAAiB,EAAE,iBAAiB,GACpC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Two-panel layout: form (top) + entity list (bottom).
|
|
5
5
|
* Supports create, update, delete, and lifecycle transitions.
|
|
6
|
+
* Entity list shows relationships (blue), lifecycles (purple), and metadata (gray).
|
|
6
7
|
*
|
|
7
8
|
* Uses RuntimeViewProvider context instead of appStore.
|
|
8
|
-
* Ported from specverse-app-demo/frontend-react/src/components/models/ModelManager.tsx
|
|
9
9
|
*/
|
|
10
10
|
export interface ModelManagerProps {
|
|
11
11
|
modelName: string;
|
|
12
12
|
controllerName?: string;
|
|
13
|
+
/** Pre-select entity for editing (e.g., navigating from detail → form) */
|
|
14
|
+
initialEntityId?: string | null;
|
|
15
|
+
/** Navigate to a related model's form (clicking FK column in entity list) */
|
|
16
|
+
onNavigateToModel?: (modelName: string, entityId?: string) => void;
|
|
13
17
|
}
|
|
14
|
-
export declare function ModelManager({ modelName, controllerName }: ModelManagerProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function ModelManager({ modelName, controllerName, initialEntityId, onNavigateToModel }: ModelManagerProps): import("react/jsx-runtime").JSX.Element;
|
|
15
19
|
//# sourceMappingURL=ModelManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelManager.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelManager.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"ModelManager.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelManager.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAKD,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,iBAAiB,2CA2chH"}
|