diff --git a/.changeset/adm-6-binding-authoring.md b/.changeset/adm-6-binding-authoring.md
new file mode 100644
index 00000000..5a2b1f25
--- /dev/null
+++ b/.changeset/adm-6-binding-authoring.md
@@ -0,0 +1,5 @@
+---
+'@ankhorage/studio': minor
+---
+
+Restore contextual component binding authoring with ZORA-owned bindable metadata, canonical manifest data bindings, uniform external/generated operation selection, schema-aware response paths, event payload input mapping, and binding diagnostics while keeping execution in Runtime.
diff --git a/README.md b/README.md
index c500adc9..f9eb72f0 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
# @ankhorage/studio
-        
+        
Standalone Studio authoring package for Ankhorage apps.
@@ -30,12 +30,20 @@ Manage Studio development and projects through the Ankh CLI.
- [Module relationships](././paradox/diagrams/module-relationships.mmd)
- [Export graph](././paradox/diagrams/export-graph.mmd)
- [addNodeToTree sequence](././paradox/diagrams/sequences/add-node-to-tree.mmd)
+- [appendStudioEventBinding sequence](././paradox/diagrams/sequences/append-studio-event-binding.mmd)
+- [assessStudioBindingCompatibility sequence](././paradox/diagrams/sequences/assess-studio-binding-compatibility.mmd)
- [buildInsertCatalogEntries sequence](././paradox/diagrams/sequences/build-insert-catalog-entries.mmd)
- [cloneWithNewIds sequence](././paradox/diagrams/sequences/clone-with-new-ids.mmd)
+- [collectStudioResponsePaths sequence](././paradox/diagrams/sequences/collect-studio-response-paths.mmd)
- [createNodeFromCatalogEntry sequence](././paradox/diagrams/sequences/create-node-from-catalog-entry.mmd)
+- [diagnoseStudioComponentBindings sequence](././paradox/diagrams/sequences/diagnose-studio-component-bindings.mmd)
- [findNodeById sequence](././paradox/diagrams/sequences/find-node-by-id.mmd)
+- [removeStudioEventBinding sequence](././paradox/diagrams/sequences/remove-studio-event-binding.mmd)
+- [removeStudioPropBinding sequence](././paradox/diagrams/sequences/remove-studio-prop-binding.mmd)
- [resolveStudioInstancePropertyGroups sequence](././paradox/diagrams/sequences/resolve-studio-instance-property-groups.mmd)
+- [resolveStudioSchemaValueMeta sequence](././paradox/diagrams/sequences/resolve-studio-schema-value-meta.mmd)
- [updateNodeInTree sequence](././paradox/diagrams/sequences/update-node-in-tree.mmd)
+- [upsertStudioPropBinding sequence](././paradox/diagrams/sequences/upsert-studio-prop-binding.mmd)
- [validateInsertRecipe sequence](././paradox/diagrams/sequences/validate-insert-recipe.mmd)
- [validateNodePlacement sequence](././paradox/diagrams/sequences/validate-node-placement.mmd)
- [validateProjectCreationInput sequence](././paradox/diagrams/sequences/validate-project-creation-input.mmd)
diff --git a/docs/binding-authoring.md b/docs/binding-authoring.md
new file mode 100644
index 00000000..d4a4391a
--- /dev/null
+++ b/docs/binding-authoring.md
@@ -0,0 +1,27 @@
+# Binding authoring
+
+Studio exposes one contextual binding surface at `/ankh/bindings/:nodeId`. It is opened from the selected component through the Studio AppBar and is intentionally separate from the Properties editor.
+
+## Ownership
+
+Studio owns authoring UX and manifest mutation only. Canonical binding shapes come from `@ankhorage/contracts`, bindable component props/events and event payload metadata come from ZORA, and binding execution remains in `@ankhorage/runtime`.
+
+Studio does not maintain a second endpoint registry, event schema registry, or binding executor.
+
+## Property/data bindings
+
+The editor only exposes properties declared in `ZORA_BINDABLE_COMPONENT_META`. Authored bindings persist in `manifest.dataBindings` and support the canonical literal, state, context, and operation-result sources.
+
+Operation-result bindings enumerate normalized `manifest.dataSources` uniformly, so external and generated APIs use the same authoring path. Response paths are derived from canonical operation response schemas and compared against ZORA bindable value metadata.
+
+## Event/action bindings
+
+The editor only exposes events declared by ZORA binding metadata. Events can target canonical actions or canonical data-source operations.
+
+Known event payload fields are surfaced from ZORA. Action payload fields come from Studio's existing action authoring metadata, while operation request inputs come from canonical operation request schemas. Inputs can use literal values or event payload paths, including nested paths beneath object/record payload fields.
+
+## Diagnostics
+
+Studio resolves operation references against the same normalized operation catalog used by the authoring selectors. Missing operation references, response paths, required operation inputs, incompatible response/input values, unknown bindable props/events, and unavailable actions are surfaced as authoring diagnostics.
+
+Diagnostics never execute operations and do not reproduce Runtime execution logic. Runtime remains the only execution owner.
diff --git a/package.json b/package.json
index ff7a2ec6..553506cc 100644
--- a/package.json
+++ b/package.json
@@ -140,6 +140,10 @@
"types": "./dist/manifestState.d.ts",
"import": "./dist/manifestState.js"
},
+ "./bindingAuthoringModel": {
+ "types": "./dist/bindingAuthoringModel.d.ts",
+ "import": "./dist/bindingAuthoringModel.js"
+ },
"./propertiesAuthoringModel": {
"types": "./dist/propertiesAuthoringModel.d.ts",
"import": "./dist/propertiesAuthoringModel.js"
diff --git a/paradox/badges/npm.svg b/paradox/badges/npm.svg
index c2b062b5..16f0aa77 100644
--- a/paradox/badges/npm.svg
+++ b/paradox/badges/npm.svg
@@ -1,7 +1,7 @@
-
+
+ src/bindingAuthoringContracts.ts
+ Referenced module
+ Dependencies: None
+
+ Exports: StudioBindableEventOption,
+ StudioBindablePropOption, StudioBindingCompatibility,
+ StudioBindingDiagnostic, StudioBindingInputFieldOption,
+ StudioBindingOperationOption,
+ StudioBindingResponsePathOption
+
+
+
+ src/bindingAuthoringModel.test.ts
+ Referenced module
+ Dependencies: src/bindingAuthoringModel.ts
+ Exports: None
+
+
+ src/bindingAuthoringModel.ts
+ Referenced module
+ Dependencies: None
+
+ Exports: appendStudioEventBinding,
+ assessStudioBindingCompatibility,
+ collectStudioBindingOperationOptions,
+ collectStudioResponsePaths, createStudioActionInputFields,
+ diagnoseStudioComponentBindings,
+ findStudioBindingOperationOption,
+ removeStudioEventBinding, removeStudioPropBinding,
+ resolveStudioBindableEvents, resolveStudioBindableProps,
+ resolveStudioSchemaValueMeta, StudioBindableEventOption,
+ StudioBindablePropOption, StudioBindingCompatibility,
+ StudioBindingDiagnostic, StudioBindingInputFieldOption,
+ StudioBindingOperationOption,
+ StudioBindingResponsePathOption, upsertStudioPropBinding
+
+
+
+ src/bindingDiagnosticsModel.ts
+ Referenced module
+
+ Dependencies: src/bindingAuthoringContracts.ts,
+ src/bindingOperationModel.ts, src/bindingSchemaModel.ts
+
+ Exports: diagnoseStudioComponentBindings
+
+
+ src/bindingManifestPersistence.test.ts
+ Referenced module
+
+ Dependencies: src/core/studioManifestDraftModel.ts,
+ src/index.ts, src/manifestSync.ts
+
+ Exports: None
+
+
+ src/bindingMetadataModel.ts
+ Referenced module
+ Dependencies: src/bindingAuthoringContracts.ts
+
+ Exports: resolveStudioBindableEvents,
+ resolveStudioBindableProps
+
+
+
+ src/bindingMutationAcceptance.test.ts
+ Referenced module
+ Dependencies: src/bindingAuthoringModel.ts
+ Exports: None
+
+
+ src/bindingMutationModel.ts
+ Referenced module
+ Dependencies: None
+
+ Exports: appendStudioEventBinding,
+ removeStudioEventBinding, removeStudioPropBinding,
+ upsertStudioPropBinding
+
+
+
+ src/bindingOperationModel.ts
+ Referenced module
+
+ Dependencies: src/bindingAuthoringContracts.ts,
+ src/bindingSchemaModel.ts
+
+
+ Exports: collectStudioBindingOperationOptions,
+ createStudioActionInputFields,
+ findStudioBindingOperationOption
+
+
+
+ src/bindingSchemaModel.ts
+ Referenced module
+ Dependencies: src/bindingAuthoringContracts.ts
+
+ Exports: assessStudioBindingCompatibility,
+ collectStudioResponsePaths, resolveStudioSchemaValueMeta
+
+
src/index.test.ts
src/index.ts
Configured entrypoint
@@ -4137,10 +4380,15 @@ src/index.ts
Exports: ACTION_REGISTRY,
ActionDefinition, addNodeToTree,
+ appendStudioEventBinding,
+ assessStudioBindingCompatibility,
buildInsertCatalogEntries, canAcceptChild,
- cloneWithNewIds, createNodeFromCatalogEntry,
+ cloneWithNewIds, collectStudioBindingOperationOptions,
+ collectStudioResponsePaths, createNodeFromCatalogEntry,
+ createStudioActionInputFields,
createStudioInstancePropertyPatch, deriveProjectId,
- findNodeById, generateStudioId,
+ diagnoseStudioComponentBindings, findNodeById,
+ findStudioBindingOperationOption, generateStudioId,
getInsertCatalogCategoryLabel,
InsertCatalogComponentEntry, InsertCatalogDisabledReason,
InsertCatalogDisabledReasonCode, InsertCatalogEntry,
@@ -4164,17 +4412,24 @@
src/index.ts
ProjectOAuthProviderHealthStatus, ProjectSecretUsage,
ProjectSecretUsageCategory, ProjectSecretUsageSummary,
ProjectSortKey, removeNodeFromTree,
+ removeStudioEventBinding, removeStudioPropBinding,
resolveDefaultInsertPlacement,
resolveInsertCatalogEntries, resolveInsertPlacement,
+ resolveStudioBindableEvents, resolveStudioBindableProps,
resolveStudioInstancePropertyFields,
resolveStudioInstancePropertyGroups,
- STUDIO_INSERT_RECIPES, STUDIO_PACKAGE_BOUNDARY,
- STUDIO_PACKAGE_NAME, STUDIO_PUBLIC_CONTRACTS,
- StudioActionPayloadField, StudioActionPayloadPrimitive,
- StudioActionPayloadSchema, StudioAdminRouteId,
- StudioAdminRoutePath, StudioAdminStaticRoutePath,
- StudioAuthoringComponentMeta, StudioAuthoringMetaRegistry,
- StudioAuthoringPropSchema, StudioCommand,
+ resolveStudioSchemaValueMeta, STUDIO_INSERT_RECIPES,
+ STUDIO_PACKAGE_BOUNDARY, STUDIO_PACKAGE_NAME,
+ STUDIO_PUBLIC_CONTRACTS, StudioActionPayloadField,
+ StudioActionPayloadPrimitive, StudioActionPayloadSchema,
+ StudioAdminRouteId, StudioAdminRoutePath,
+ StudioAdminStaticRoutePath, StudioAuthoringComponentMeta,
+ StudioAuthoringMetaRegistry, StudioAuthoringPropSchema,
+ StudioBindableEventOption, StudioBindablePropOption,
+ StudioBindingCompatibility, StudioBindingDiagnostic,
+ StudioBindingInputFieldOption,
+ StudioBindingOperationOption,
+ StudioBindingResponsePathOption, StudioCommand,
StudioComponentBlueprint, StudioComponentMeta,
StudioComponentMetaRegistry, StudioContextValue,
StudioEvent, StudioIdGenerator,
@@ -4191,8 +4446,8 @@ src/index.ts
TemplateCatalogCategory, TemplateCatalogTemplate,
TemplateEntry, ThemeUpdates,
TPL_SCREEN_EMPTY, updateNodeInTree,
- validateInsertRecipe, validateNodePlacement,
- validateProjectCreationInput
+ upsertStudioPropBinding, validateInsertRecipe,
+ validateNodePlacement, validateProjectCreationInput
src/root.test.ts
src/root.ts
Referenced module
@@ -4647,14 +4902,18 @@ src/root.ts
ActionDefinition, addNodeToTree,
analyzeProjectAuthHealth, AnkhAdminPage,
AnkhAdminShell, AnkhStudio,
- assertMetadataOnlyResponse, buildInsertCatalogEntries,
- canAcceptChild, cloneWithNewIds,
- CreateCategoriesScreen, CreateCategoryTemplatesScreen,
- createNodeFromCatalogEntry,
+ appendStudioEventBinding, assertMetadataOnlyResponse,
+ assessStudioBindingCompatibility,
+ buildInsertCatalogEntries, canAcceptChild,
+ cloneWithNewIds, collectStudioBindingOperationOptions,
+ collectStudioResponsePaths, CreateCategoriesScreen,
+ CreateCategoryTemplatesScreen, createNodeFromCatalogEntry,
CreateProjectFromTemplateScreen,
+ createStudioActionInputFields,
createStudioInstancePropertyPatch, deriveProjectId,
- findNodeById, findProjectSecretUsages,
- findRawSecretResponseKey, generateStudioId,
+ diagnoseStudioComponentBindings, findNodeById,
+ findProjectSecretUsages, findRawSecretResponseKey,
+ findStudioBindingOperationOption, generateStudioId,
getInsertCatalogCategoryLabel,
InsertCatalogComponentEntry, InsertCatalogDisabledReason,
InsertCatalogDisabledReasonCode, InsertCatalogEntry,
@@ -4679,21 +4938,28 @@ src/root.ts
ProjectSecretUsageCategory, ProjectSecretUsageSummary,
ProjectSortKey, ProjectsOverviewScreen,
RAW_SECRET_RESPONSE_KEYS, RawSecretResponseKeyMatch,
- removeNodeFromTree, resolveDefaultInsertPlacement,
+ removeNodeFromTree, removeStudioEventBinding,
+ removeStudioPropBinding, resolveDefaultInsertPlacement,
resolveInsertCatalogEntries, resolveInsertPlacement,
+ resolveStudioBindableEvents, resolveStudioBindableProps,
resolveStudioInstancePropertyFields,
resolveStudioInstancePropertyGroups,
- STUDIO_INSERT_RECIPES, STUDIO_PACKAGE_BOUNDARY,
- STUDIO_PACKAGE_NAME, STUDIO_PUBLIC_CONTRACTS,
- StudioActionPayloadField, StudioActionPayloadPrimitive,
- StudioActionPayloadSchema, StudioAdminRouteId,
- StudioAdminRoutePath, StudioAdminStaticRoutePath,
- StudioApp, StudioAuthoringComponentMeta,
- StudioAuthoringMetaRegistry, StudioAuthoringPropSchema,
- StudioCommand, StudioComponentBlueprint,
- StudioComponentMeta, StudioComponentMetaRegistry,
- StudioContextValue, StudioEvent,
- StudioIdGenerator, StudioInstancePropertyEditorKind,
+ resolveStudioSchemaValueMeta, STUDIO_INSERT_RECIPES,
+ STUDIO_PACKAGE_BOUNDARY, STUDIO_PACKAGE_NAME,
+ STUDIO_PUBLIC_CONTRACTS, StudioActionPayloadField,
+ StudioActionPayloadPrimitive, StudioActionPayloadSchema,
+ StudioAdminRouteId, StudioAdminRoutePath,
+ StudioAdminStaticRoutePath, StudioApp,
+ StudioAuthoringComponentMeta, StudioAuthoringMetaRegistry,
+ StudioAuthoringPropSchema, StudioBindableEventOption,
+ StudioBindablePropOption, StudioBindingCompatibility,
+ StudioBindingDiagnostic, StudioBindingInputFieldOption,
+ StudioBindingOperationOption,
+ StudioBindingResponsePathOption, StudioCommand,
+ StudioComponentBlueprint, StudioComponentMeta,
+ StudioComponentMetaRegistry, StudioContextValue,
+ StudioEvent, StudioIdGenerator,
+ StudioInstancePropertyEditorKind,
StudioInstancePropertyField, StudioInstancePropertyGroup,
StudioInstancePropertyValue, StudioLocale,
StudioManifest, StudioMode, StudioModuleId,
@@ -4706,9 +4972,10 @@ src/root.ts
TemplateCatalog, TemplateCatalogCategory,
TemplateCatalogTemplate, TemplateEntry,
ThemeUpdates, TPL_SCREEN_EMPTY,
- updateNodeInTree, useStudio,
- useStudioAppBarAugmentation, validateInsertRecipe,
- validateNodePlacement, validateProjectCreationInput
+ updateNodeInTree, upsertStudioPropBinding,
+ useStudio, useStudioAppBarAugmentation,
+ validateInsertRecipe, validateNodePlacement,
+ validateProjectCreationInput
@@ -5186,7 +5453,7 @@ src/studioAdminRouteModel.test.ts
src/studioAdminRouteModel.ts
Referenced module
@@ -5194,11 +5461,13 @@ src/studioAdminRouteModel.ts
Exports: createStudioAdminRoutePath,
createStudioAdminRouteRenderState,
+ createStudioBindingsRoutePath,
createStudioPropertiesRoutePath,
getStudioAdminRouteDefinition, isStudioAdminPath,
isStudioAdminRouteActive, isStudioAdminRouteAvailable,
openStudioAdminRoute, resolveStudioAdminActiveRouteId,
resolveStudioAdminRouteId, resolveStudioAdminRoutePath,
+ resolveStudioBindingsNodeId,
resolveStudioLastNonAdminLocation,
resolveStudioNavigableLocation,
resolveStudioPropertiesNodeId,
@@ -5291,7 +5560,7 @@
src/ui/admin/AnkhAdminPage.test.ts
src/ui/admin/AnkhAdminPage.tsx
Referenced module
@@ -5300,6 +5569,7 @@ src/ui/admin/AnkhAdminPage.tsx
src/index.ts, src/studioAdminRouteModel.ts,
src/ui/admin/pages/ApisAdminPage.tsx,
src/ui/admin/pages/AuthAdminPage.tsx,
+ src/ui/admin/pages/BindingsAdminPage.tsx,
src/ui/admin/pages/OverviewAdminPage.tsx,
src/ui/admin/pages/PropertiesAdminPage.tsx,
src/ui/admin/pages/SecretsAdminPage.tsx,
@@ -5548,6 +5818,115 @@ src/ui/admin/pages/AuthAdminPage.tsx
AuthAdminPageProps
+
+ src/ui/admin/pages/bindings/bindingAdminStyles.ts
+ Referenced module
+ Dependencies: None
+ Exports: bindingAdminStyles
+
+
+ src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx
+ Referenced module
+
+ Dependencies: src/bindingAuthoringModel.ts,
+ src/ui/admin/pages/bindings/bindingAdminStyles.ts
+
+ Exports: BindingDiagnosticsCard
+
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts
+ Referenced module
+ Dependencies: src/bindingAuthoringModel.ts
+
+ Exports: createStudioEventBinding,
+ createStudioEventInputDrafts, createStudioOperationKey,
+ createStudioPropBindingForSource,
+ findStudioOperationByKey, formatStudioBindingLiteral,
+ parseStudioBindingLiteral, STUDIO_BINDING_SOURCE_OPTIONS,
+ StudioBindingSourceKind, StudioEventInputDraft,
+ StudioEventInputSourceKind
+
+
+
+ src/ui/admin/pages/bindings/EventBindingComposer.tsx
+ Referenced module
+
+ Dependencies: src/bindingAuthoringModel.ts,
+ src/index.ts, src/ui/admin/adminPagePrimitives.tsx,
+ src/ui/admin/pages/bindings/bindingAdminStyles.ts,
+ src/ui/admin/pages/bindings/bindingEditorModel.ts
+
+ Exports: EventBindingComposer
+
+
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx
+ Referenced module
+
+ Dependencies: src/bindingAuthoringModel.ts,
+ src/ui/admin/pages/bindings/bindingAdminStyles.ts,
+ src/ui/admin/pages/bindings/EventBindingComposer.tsx
+
+ Exports: EventBindingsCard
+
+
+ src/ui/admin/pages/bindings/PropertyBindingEditor.tsx
+ Referenced module
+
+ Dependencies: src/bindingAuthoringModel.ts,
+ src/ui/admin/adminPagePrimitives.tsx,
+ src/ui/admin/pages/bindings/bindingAdminStyles.ts,
+ src/ui/admin/pages/bindings/bindingEditorModel.ts
+
+ Exports: PropertyBindingEditor
+
+
+ src/ui/admin/pages/bindings/PropertyBindingsCard.tsx
+ Referenced module
+
+ Dependencies: src/bindingAuthoringModel.ts,
+ src/ui/admin/pages/bindings/bindingAdminStyles.ts,
+ src/ui/admin/pages/bindings/PropertyBindingEditor.tsx
+
+ Exports: PropertyBindingsCard
+
+
+ src/ui/admin/pages/BindingsAdminPage.tsx
+ Referenced module
+
+ Dependencies: src/bindingAuthoringModel.ts,
+ src/core/StudioContext.ts, src/index.ts,
+ src/manifestState.ts,
+ src/ui/admin/adminPagePrimitives.tsx,
+ src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx,
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx,
+ src/ui/admin/pages/bindings/PropertyBindingsCard.tsx
+
+ Exports: BindingsAdminPage
+
src/workspaceSearch.ts
Public API
- src/index.ts
+ src/bindingAuthoringContracts.ts
- ACTION_REGISTRY
- value • src/index.ts:378:14
+ StudioBindableEventOption
+ type • src/bindingAuthoringContracts.ts:16:1
Export paths: src/index.ts
Related symbols: None
-
-
- ActionDefinition
- type • src/index.ts:284:1
-
- Export paths: src/index.ts
-
-
Related symbols:
-
- - StudioActionPayloadSchema
-
-
@@ -5971,21 +6334,1044 @@ ActionDefinition
- description |
+ label |
property |
string |
yes |
|
- label |
+ meta |
property |
- string |
+ UiBindableEventMeta |
yes |
|
- payloadSchema |
+ name |
+ property |
+ string |
+ yes |
+ |
+
+
+
+
+
+ StudioBindablePropOption
+ type • src/bindingAuthoringContracts.ts:10:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ label |
+ property |
+ string |
+ yes |
+ |
+
+
+ meta |
+ property |
+ UiBindablePropMeta |
+ yes |
+ |
+
+
+ name |
+ property |
+ string |
+ yes |
+ |
+
+
+
+
+
+ StudioBindingCompatibility
+ unknown • src/bindingAuthoringContracts.ts:8:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+ StudioBindingDiagnostic
+ type • src/bindingAuthoringContracts.ts:43:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ code |
+ property |
+
+ "incompatible-input" | "incompatible-response" |
+ "missing-action" | "missing-binding-meta" |
+ "missing-input" | "missing-operation" |
+ "missing-response-path" | "unknown-event" |
+ "unknown-prop"
+ |
+ yes |
+ |
+
+
+ message |
+ property |
+ string |
+ yes |
+ |
+
+
+ path |
+ property |
+ string | undefined |
+ no |
+ |
+
+
+ severity |
+ property |
+ "warning" | "error" |
+ yes |
+ |
+
+
+
+
+
+ StudioBindingInputFieldOption
+ type • src/bindingAuthoringContracts.ts:22:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ label |
+ property |
+ string |
+ yes |
+ |
+
+
+ name |
+ property |
+ string |
+ yes |
+ |
+
+
+ required |
+ property |
+ boolean |
+ yes |
+ |
+
+
+ value |
+ property |
+ UiBindableValueMeta |
+ yes |
+ |
+
+
+
+
+
+ StudioBindingOperationOption
+ type • src/bindingAuthoringContracts.ts:35:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingInputFieldOption
+ - StudioBindingResponsePathOption
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ inputFields |
+ property |
+ readonly StudioBindingInputFieldOption[] |
+ yes |
+ |
+
+
+ label |
+ property |
+ string |
+ yes |
+ |
+
+
+ operation |
+ property |
+ BindingOperationRef |
+ yes |
+ |
+
+
+ responsePaths |
+ property |
+ readonly StudioBindingResponsePathOption[] |
+ yes |
+ |
+
+
+ sourceLabel |
+ property |
+ string |
+ yes |
+ |
+
+
+
+
+
+ StudioBindingResponsePathOption
+ type • src/bindingAuthoringContracts.ts:29:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ label |
+ property |
+ string |
+ yes |
+ |
+
+
+ path |
+ property |
+ string |
+ yes |
+ |
+
+
+ value |
+ property |
+ UiBindableValueMeta |
+ yes |
+ |
+
+
+
+
+
+
+ src/bindingDiagnosticsModel.ts
+
+ diagnoseStudioComponentBindings
+ function • src/bindingDiagnosticsModel.ts:20:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingDiagnostic
+ - StudioBindingOperationOption
+
+
+
+
Signature
+
+(args: { readonly node: UiNode; readonly registry: ComponentDataBindingRegistry; readonly componentMeta: UiComponentMetaRegistry; readonly operations: readonly StudioBindingOperationOption[]; readonly actionTypes: readonly string[]; }) => readonly StudioBindingDiagnostic[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ args |
+
+ { readonly node: UiNode; readonly registry:
+ ComponentDataBindingRegistry; readonly componentMeta:
+ UiComponentMetaRegistry; readonly operations: readonly
+ StudioBindingOperationOption[]; readonly actionTypes: readonly string[];
+ }
+ |
+ yes |
+ |
+
+
+
+
Returns: readonly StudioBindingDiagnostic[]
+
+
+
+
+ src/bindingMetadataModel.ts
+
+ resolveStudioBindableEvents
+ function • src/bindingMetadataModel.ts:21:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindableEventOption
+
+
+
+
Signature
+
+(node: UiNode, registry: Readonly<Record<string, import("/Users/a_rtiphishl_e/git/studio/node_modules/.bun/@ankhorage+contracts@4.0.2/node_modules/@ankhorage/contracts/dist/ui").UiComponentMeta>>) => readonly StudioBindableEventOption[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string,
+ import("/Users/a_rtiphishl_e/git/studio/node_modules/.bun/@ankhorage+contracts@4.0.2/node_modules/@ankhorage/contracts/dist/ui").UiComponentMeta>>
+ |
+ yes |
+ |
+
+
+
+
Returns: readonly StudioBindableEventOption[]
+
+
+
+ resolveStudioBindableProps
+ function • src/bindingMetadataModel.ts:8:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindablePropOption
+
+
+
+
Signature
+
+(node: UiNode, registry: Readonly<Record<string, import("/Users/a_rtiphishl_e/git/studio/node_modules/.bun/@ankhorage+contracts@4.0.2/node_modules/@ankhorage/contracts/dist/ui").UiComponentMeta>>) => readonly StudioBindablePropOption[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string,
+ import("/Users/a_rtiphishl_e/git/studio/node_modules/.bun/@ankhorage+contracts@4.0.2/node_modules/@ankhorage/contracts/dist/ui").UiComponentMeta>>
+ |
+ yes |
+ |
+
+
+
+
Returns: readonly StudioBindablePropOption[]
+
+
+
+
+ src/bindingMutationModel.ts
+
+ appendStudioEventBinding
+ function • src/bindingMutationModel.ts:34:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
Signature
+
+(registry: Readonly<Record<string, ComponentDataBinding>>, node: UiNode, eventName: string, binding: EventBinding) => Readonly<Record<string, ComponentDataBinding>>
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ binding |
+ EventBinding |
+ yes |
+ |
+
+
+ eventName |
+ string |
+ yes |
+ |
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string, ComponentDataBinding>>
+ |
+ yes |
+ |
+
+
+
+
+ Returns:
+ Readonly<Record<string, ComponentDataBinding>>
+
+
+
+
+ removeStudioEventBinding
+ function • src/bindingMutationModel.ts:50:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
Signature
+
+(registry: Readonly<Record<string, ComponentDataBinding>>, node: UiNode, eventName: string, bindingIndex: number) => Readonly<Record<string, ComponentDataBinding>>
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ bindingIndex |
+ number |
+ yes |
+ |
+
+
+ eventName |
+ string |
+ yes |
+ |
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string, ComponentDataBinding>>
+ |
+ yes |
+ |
+
+
+
+
+ Returns:
+ Readonly<Record<string, ComponentDataBinding>>
+
+
+
+
+ removeStudioPropBinding
+ function • src/bindingMutationModel.ts:22:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
Signature
+
+(registry: Readonly<Record<string, ComponentDataBinding>>, node: UiNode, propName: string) => Readonly<Record<string, ComponentDataBinding>>
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ propName |
+ string |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string, ComponentDataBinding>>
+ |
+ yes |
+ |
+
+
+
+
+ Returns:
+ Readonly<Record<string, ComponentDataBinding>>
+
+
+
+
+ upsertStudioPropBinding
+ function • src/bindingMutationModel.ts:9:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
Signature
+
+(registry: Readonly<Record<string, ComponentDataBinding>>, node: UiNode, propName: string, binding: PropBinding) => Readonly<Record<string, ComponentDataBinding>>
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ binding |
+ PropBinding |
+ yes |
+ |
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ propName |
+ string |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string, ComponentDataBinding>>
+ |
+ yes |
+ |
+
+
+
+
+ Returns:
+ Readonly<Record<string, ComponentDataBinding>>
+
+
+
+
+
+ src/bindingOperationModel.ts
+
+ collectStudioBindingOperationOptions
+ function • src/bindingOperationModel.ts:16:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingOperationOption
+
+
+
+
Signature
+
+(dataSources: Readonly<Record<string, DataSourceConfig>>) => readonly StudioBindingOperationOption[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ dataSources |
+ Readonly<Record<string, DataSourceConfig>> |
+ yes |
+ |
+
+
+
+
+ Returns: readonly StudioBindingOperationOption[]
+
+
+
+
+ createStudioActionInputFields
+ function • src/bindingOperationModel.ts:95:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingInputFieldOption
+
+
+
+
Signature
+
+(payloadSchema: Readonly<Record<string, { readonly label: string; readonly type: string; readonly required?: boolean; }>> | undefined) => readonly StudioBindingInputFieldOption[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ payloadSchema |
+
+ Readonly<Record<string, { readonly label: string; readonly type:
+ string; readonly required?: boolean; }>> | undefined
+ |
+ yes |
+ |
+
+
+
+
+ Returns: readonly StudioBindingInputFieldOption[]
+
+
+
+
+ findStudioBindingOperationOption
+ function • src/bindingOperationModel.ts:24:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingOperationOption
+
+
+
+
Signature
+
+(options: readonly StudioBindingOperationOption[], ref: BindingOperationRef) => StudioBindingOperationOption | undefined
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ options |
+ readonly StudioBindingOperationOption[] |
+ yes |
+ |
+
+
+ ref |
+ BindingOperationRef |
+ yes |
+ |
+
+
+
+
+ Returns: StudioBindingOperationOption | undefined
+
+
+
+
+
+ src/bindingSchemaModel.ts
+
+ assessStudioBindingCompatibility
+ function • src/bindingSchemaModel.ts:43:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingCompatibility
+
+
+
+
Signature
+
+(expected: UiBindableValueMeta, actual: UiBindableValueMeta) => StudioBindingCompatibility
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ actual |
+ UiBindableValueMeta |
+ yes |
+ |
+
+
+ expected |
+ UiBindableValueMeta |
+ yes |
+ |
+
+
+
+
Returns: StudioBindingCompatibility
+
+
+
+ collectStudioResponsePaths
+ function • src/bindingSchemaModel.ts:33:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioBindingResponsePathOption
+
+
+
+
Signature
+
+(schema: DataSchema | undefined, schemas: Readonly<Record<string, DataSchema>> | undefined) => readonly StudioBindingResponsePathOption[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ schema |
+ DataSchema | undefined |
+ yes |
+ |
+
+
+ schemas |
+
+ Readonly<Record<string, DataSchema>> | undefined
+ |
+ yes |
+ |
+
+
+
+
+ Returns:
+ readonly StudioBindingResponsePathOption[]
+
+
+
+
+ resolveStudioSchemaValueMeta
+ function • src/bindingSchemaModel.ts:14:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
Signature
+
+(schema: DataSchema | undefined, schemas: Readonly<Record<string, DataSchema>> | undefined, seen?: ReadonlySet<string>) => UiBindableValueMeta
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ schema |
+ DataSchema | undefined |
+ yes |
+ |
+
+
+ schemas |
+
+ Readonly<Record<string, DataSchema>> | undefined
+ |
+ yes |
+ |
+
+
+ seen |
+ ReadonlySet<string> |
+ no |
+ |
+
+
+
+
Returns: UiBindableValueMeta
+
+
+
+
+ src/index.ts
+
+ ACTION_REGISTRY
+ value • src/index.ts:384:14
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+ ActionDefinition
+ type • src/index.ts:290:1
+
+ Export paths: src/index.ts
+
+
Related symbols:
+
+ - StudioActionPayloadSchema
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ description |
+ property |
+ string |
+ yes |
+ |
+
+
+ label |
+ property |
+ string |
+ yes |
+ |
+
+
+ payloadSchema |
property |
StudioActionPayloadSchema | undefined |
no |
@@ -6014,7 +7400,7 @@ ActionDefinition
data-search='addNodeToTree value src/index.ts StudioComponentMetaRegistry (args: { root: UiNode; targetId: string; newNode: UiNode; componentMeta: StudioComponentMetaRegistry; mode?: "append" | "prepend"; }) => UiNode'
>
addNodeToTree
- value • src/index.ts:600:14
+ value • src/index.ts:606:14
Export paths: src/index.ts
@@ -6060,7 +7446,7 @@
Signature
data-search="buildInsertCatalogEntries function src/index.ts InsertCatalogEntry InsertRecipe StudioComponentMetaRegistry (args: { componentMeta: StudioComponentMetaRegistry; recipes?: readonly InsertRecipe[]; }) => InsertCatalogEntry[]"
>
buildInsertCatalogEntries
-
function • src/index.ts:1312:1
+
function • src/index.ts:1318:1
Export paths: src/index.ts
@@ -6107,7 +7493,7 @@
Signature
data-search="canAcceptChild function src/index.ts StudioComponentMetaRegistry (args: { parentType: string; childType: string; componentMeta: StudioComponentMetaRegistry; }) => boolean"
>
canAcceptChild
-
function • src/index.ts:759:1
+
function • src/index.ts:765:1
Export paths: src/index.ts
@@ -6152,7 +7538,7 @@
Signature
data-search="cloneWithNewIds value src/index.ts StudioIdGenerator (node: UiNode, createId?: StudioIdGenerator) => UiNode"
>
cloneWithNewIds
-
value • src/index.ts:525:14
+
value • src/index.ts:531:14
Export paths: src/index.ts
@@ -6197,7 +7583,7 @@
Signature
data-search="createNodeFromCatalogEntry function src/index.ts InsertCatalogEntry StudioComponentMetaRegistry StudioIdGenerator (entry: InsertCatalogEntry, componentMeta: StudioComponentMetaRegistry, createId?: StudioIdGenerator) => UiNode"
>
createNodeFromCatalogEntry
-
function • src/index.ts:1231:1
+
function • src/index.ts:1237:1
Export paths: src/index.ts
@@ -6251,7 +7637,7 @@
Signature
data-search="findNodeById value src/index.ts (root: UiNode, id: string) => UiNode | null"
>
findNodeById
-
value • src/index.ts:542:14
+
value • src/index.ts:548:14
Export paths: src/index.ts
Related symbols: None
@@ -6291,7 +7677,7 @@
Signature
data-search="generateStudioId value src/index.ts (prefix?: string | undefined) => string"
>
generateStudioId
-
value • src/index.ts:518:14
+
value • src/index.ts:524:14
Export paths: src/index.ts
Related symbols: None
@@ -6325,7 +7711,7 @@
Signature
data-search="getInsertCatalogCategoryLabel function src/index.ts (category: string) => string"
>
getInsertCatalogCategoryLabel
-
function • src/index.ts:1157:1
+
function • src/index.ts:1163:1
Export paths: src/index.ts
Related symbols: None
@@ -6359,7 +7745,7 @@
Signature
data-search="InsertCatalogComponentEntry type src/index.ts InsertCatalogDisabledReason InsertCatalogEntryStatus NodePlacement"
>
InsertCatalogComponentEntry
-
type • src/index.ts:262:1
+
type • src/index.ts:268:1
Export paths: src/index.ts
@@ -6461,7 +7847,7 @@
InsertCatalogComponentEntry
data-search="InsertCatalogDisabledReason type src/index.ts InsertCatalogDisabledReasonCode InsertRecipeIssue"
>
InsertCatalogDisabledReason
-
type • src/index.ts:244:1
+
type • src/index.ts:250:1
Export paths: src/index.ts
@@ -6513,7 +7899,7 @@
InsertCatalogDisabledReason
data-search="InsertCatalogDisabledReasonCode unknown src/index.ts "
>
InsertCatalogDisabledReasonCode
-
unknown • src/index.ts:221:1
+
unknown • src/index.ts:227:1
Export paths: src/index.ts
Related symbols: None
@@ -6524,7 +7910,7 @@
InsertCatalogDisabledReasonCode
data-search="InsertCatalogEntry unknown src/index.ts "
>
InsertCatalogEntry
-
unknown • src/index.ts:272:1
+
unknown • src/index.ts:278:1
Export paths: src/index.ts
Related symbols: None
@@ -6535,7 +7921,7 @@
InsertCatalogEntry
data-search="InsertCatalogEntryBase type src/index.ts InsertCatalogDisabledReason InsertCatalogEntryKind InsertCatalogEntryStatus NodePlacement"
>
InsertCatalogEntryBase
-
type • src/index.ts:250:1
+
type • src/index.ts:256:1
Export paths: src/index.ts
@@ -6631,7 +8017,7 @@
InsertCatalogEntryBase
data-search="InsertCatalogEntryKind unknown src/index.ts "
>
InsertCatalogEntryKind
-
unknown • src/index.ts:218:1
+
unknown • src/index.ts:224:1
Export paths: src/index.ts
Related symbols: None
@@ -6642,7 +8028,7 @@
InsertCatalogEntryKind
data-search="InsertCatalogEntryStatus unknown src/index.ts "
>
InsertCatalogEntryStatus
-
unknown • src/index.ts:219:1
+
unknown • src/index.ts:225:1
Export paths: src/index.ts
Related symbols: None
@@ -6653,7 +8039,7 @@
InsertCatalogEntryStatus
data-search="InsertCatalogRecipeEntry type src/index.ts InsertCatalogDisabledReason InsertCatalogEntryStatus InsertRecipe NodePlacement"
>
InsertCatalogRecipeEntry
-
type • src/index.ts:267:1
+
type • src/index.ts:273:1
Export paths: src/index.ts
@@ -6756,7 +8142,7 @@
InsertCatalogRecipeEntry
data-search="insertNodeAtPlacement function src/index.ts InsertNodeAtPlacementArgs InsertNodeAtPlacementResult (args: InsertNodeAtPlacementArgs) => InsertNodeAtPlacementResult | null"
>
insertNodeAtPlacement
-
function • src/index.ts:989:1
+
function • src/index.ts:995:1
Export paths: src/index.ts
@@ -6797,7 +8183,7 @@
Signature
data-search="InsertNodeAtPlacementArgs type src/index.ts NodePlacement StudioComponentMetaRegistry"
>
InsertNodeAtPlacementArgs
-
type • src/index.ts:932:1
+
type • src/index.ts:938:1
Export paths: src/index.ts
@@ -6856,7 +8242,7 @@
InsertNodeAtPlacementArgs
data-search="InsertNodeAtPlacementResult type src/index.ts "
>
InsertNodeAtPlacementResult
-
type • src/index.ts:939:1
+
type • src/index.ts:945:1
Export paths: src/index.ts
Related symbols: None
@@ -6895,7 +8281,7 @@
InsertNodeAtPlacementResult
data-search="InsertRecipe type src/index.ts InsertRecipeNode"
>
InsertRecipe
-
type • src/index.ts:229:1
+
type • src/index.ts:235:1
Export paths: src/index.ts
@@ -6960,7 +8346,7 @@
InsertRecipe
data-search="InsertRecipeIssue type src/index.ts "
>
InsertRecipeIssue
-
type • src/index.ts:237:1
+
type • src/index.ts:243:1
Export paths: src/index.ts
Related symbols: None
@@ -7013,7 +8399,7 @@
InsertRecipeIssue
data-search="InsertRecipeNode type src/index.ts "
>
InsertRecipeNode
-
type • src/index.ts:224:1
+
type • src/index.ts:230:1
Export paths: src/index.ts
Related symbols: None
@@ -7052,7 +8438,7 @@
InsertRecipeNode
data-search="ModuleDefinition type src/index.ts "
>
ModuleDefinition
-
type • src/index.ts:292:1
+
type • src/index.ts:298:1
Export paths: src/index.ts
Related symbols: None
@@ -7105,7 +8491,7 @@
ModuleDefinition
data-search='moveNodeInTree value src/index.ts (root: UiNode, nodeId: string, direction: "up" | "down") => UiNode'
>
moveNodeInTree
-
value • src/index.ts:633:14
+
value • src/index.ts:639:14
Export paths: src/index.ts
Related symbols: None
@@ -7152,7 +8538,7 @@
Signature
data-search="moveNodeToPlacement function src/index.ts MoveNodeToPlacementArgs MoveNodeToPlacementResult (args: MoveNodeToPlacementArgs) => MoveNodeToPlacementResult | null"
>
moveNodeToPlacement
-
function • src/index.ts:1057:1
+
function • src/index.ts:1063:1
Export paths: src/index.ts
@@ -7192,7 +8578,7 @@
Signature
data-search="MoveNodeToPlacementArgs type src/index.ts NodePlacement StudioComponentMetaRegistry"
>
MoveNodeToPlacementArgs
-
type • src/index.ts:1016:1
+
type • src/index.ts:1022:1
Export paths: src/index.ts
@@ -7251,7 +8637,7 @@
MoveNodeToPlacementArgs
data-search="MoveNodeToPlacementResult type src/index.ts "
>
MoveNodeToPlacementResult
-
type • src/index.ts:1023:1
+
type • src/index.ts:1029:1
Export paths: src/index.ts
Related symbols: None
@@ -7290,7 +8676,7 @@
MoveNodeToPlacementResult
data-search="NodePlacement type src/index.ts PlacementKind"
>
NodePlacement
-
type • src/index.ts:180:1
+
type • src/index.ts:186:1
Export paths: src/index.ts
@@ -7348,7 +8734,7 @@
NodePlacement
data-search="PlacementFailureCode unknown src/index.ts "
>
PlacementFailureCode
-
unknown • src/index.ts:187:1
+
unknown • src/index.ts:193:1
Export paths: src/index.ts
Related symbols: None
@@ -7359,7 +8745,7 @@
PlacementFailureCode
data-search="PlacementFailureReason type src/index.ts PlacementFailureCode"
>
PlacementFailureReason
-
type • src/index.ts:199:1
+
type • src/index.ts:205:1
Export paths: src/index.ts
@@ -7403,7 +8789,7 @@
PlacementFailureReason
data-search="PlacementKind unknown src/index.ts "
>
PlacementKind
-
unknown • src/index.ts:178:1
+
unknown • src/index.ts:184:1
Export paths: src/index.ts
Related symbols: None
@@ -7414,7 +8800,7 @@
PlacementKind
data-search="PlacementResolutionResult unknown src/index.ts "
>
PlacementResolutionResult
-
unknown • src/index.ts:211:1
+
unknown • src/index.ts:217:1
Export paths: src/index.ts
Related symbols: None
@@ -7425,7 +8811,7 @@
PlacementResolutionResult
data-search="PlacementValidationResult unknown src/index.ts "
>
PlacementValidationResult
-
unknown • src/index.ts:204:1
+
unknown • src/index.ts:210:1
Export paths: src/index.ts
Related symbols: None
@@ -7436,7 +8822,7 @@
PlacementValidationResult
data-search="removeNodeFromTree value src/index.ts (root: UiNode, nodeId: string) => UiNode | null"
>
removeNodeFromTree
-
value • src/index.ts:582:14
+
value • src/index.ts:588:14
Export paths: src/index.ts
Related symbols: None
@@ -7476,7 +8862,7 @@
Signature
data-search="resolveDefaultInsertPlacement function src/index.ts PlacementResolutionResult StudioComponentMetaRegistry (args: { root: UiNode; selectedNodeId: string | null; childType: string; componentMeta: StudioComponentMetaRegistry; }) => PlacementResolutionResult"
>
resolveDefaultInsertPlacement
-
function • src/index.ts:887:1
+
function • src/index.ts:893:1
Export paths: src/index.ts
@@ -7522,7 +8908,7 @@
Signature
data-search="resolveInsertCatalogEntries function src/index.ts InsertCatalogEntry StudioComponentMetaRegistry (args: { entries: readonly InsertCatalogEntry[]; root: UiNode | null; selectedNodeId: string | null; componentMeta: StudioComponentMetaRegistry; }) => InsertCatalogEntry[]"
>
resolveInsertCatalogEntries
-
function • src/index.ts:1354:1
+
function • src/index.ts:1360:1
Export paths: src/index.ts
@@ -7569,7 +8955,7 @@
Signature
data-search="resolveInsertPlacement function src/index.ts PlacementKind PlacementResolutionResult StudioComponentMetaRegistry (args: { root: UiNode; targetNodeId: string; childType: string; componentMeta: StudioComponentMetaRegistry; kind: PlacementKind; }) => PlacementResolutionResult"
>
resolveInsertPlacement
-
function • src/index.ts:826:1
+
function • src/index.ts:832:1
Export paths: src/index.ts
@@ -7616,7 +9002,7 @@
Signature
data-search="STUDIO_INSERT_RECIPES value src/index.ts "
>
STUDIO_INSERT_RECIPES
-
value • src/index.ts:1124:14
+
value • src/index.ts:1130:14
Export paths: src/index.ts
Related symbols: None
@@ -7627,7 +9013,7 @@
STUDIO_INSERT_RECIPES
data-search="STUDIO_PACKAGE_BOUNDARY value src/index.ts "
>
STUDIO_PACKAGE_BOUNDARY
-
value • src/index.ts:59:14
+
value • src/index.ts:60:14
Export paths: src/index.ts
Related symbols: None
@@ -7638,7 +9024,7 @@
STUDIO_PACKAGE_BOUNDARY
data-search="STUDIO_PACKAGE_NAME value src/index.ts "
>
STUDIO_PACKAGE_NAME
-
value • src/index.ts:51:14
+
value • src/index.ts:52:14
Export paths: src/index.ts
Related symbols: None
@@ -7649,7 +9035,7 @@
STUDIO_PACKAGE_NAME
data-search="STUDIO_PUBLIC_CONTRACTS value src/index.ts "
>
STUDIO_PUBLIC_CONTRACTS
-
value • src/index.ts:87:14
+
value • src/index.ts:88:14
Export paths: src/index.ts
Related symbols: None
@@ -7660,7 +9046,7 @@
STUDIO_PUBLIC_CONTRACTS
data-search="StudioActionPayloadField type src/index.ts StudioActionPayloadPrimitive"
>
StudioActionPayloadField
-
type • src/index.ts:276:1
+
type • src/index.ts:282:1
Export paths: src/index.ts
@@ -7711,7 +9097,7 @@
StudioActionPayloadField
data-search="StudioActionPayloadPrimitive unknown src/index.ts "
>
StudioActionPayloadPrimitive
-
unknown • src/index.ts:274:1
+
unknown • src/index.ts:280:1
Export paths: src/index.ts
Related symbols: None
@@ -7722,7 +9108,7 @@
StudioActionPayloadPrimitive
data-search="StudioActionPayloadSchema unknown src/index.ts "
>
StudioActionPayloadSchema
-
unknown • src/index.ts:282:1
+
unknown • src/index.ts:288:1
Export paths: src/index.ts
Related symbols: None
@@ -7733,7 +9119,7 @@
StudioActionPayloadSchema
data-search="StudioAdminRouteId unknown src/index.ts "
>
StudioAdminRouteId
-
unknown • src/index.ts:122:1
+
unknown • src/index.ts:126:1
Export paths: src/index.ts
Related symbols: None
@@ -7744,7 +9130,7 @@
StudioAdminRouteId
data-search="StudioAdminRoutePath unknown src/index.ts "
>
StudioAdminRoutePath
-
unknown • src/index.ts:145:1
+
unknown • src/index.ts:150:1
Export paths: src/index.ts
Related symbols: None
@@ -7755,7 +9141,7 @@
StudioAdminRoutePath
data-search="StudioAdminStaticRoutePath unknown src/index.ts "
>
StudioAdminStaticRoutePath
-
unknown • src/index.ts:134:1
+
unknown • src/index.ts:139:1
Export paths: src/index.ts
Related symbols: None
@@ -7766,7 +9152,7 @@
StudioAdminStaticRoutePath
data-search="StudioCommand unknown src/index.ts "
>
StudioCommand
-
unknown • src/index.ts:317:1
+
unknown • src/index.ts:323:1
Export paths: src/index.ts
Related symbols: None
@@ -7777,7 +9163,7 @@
StudioCommand
data-search="StudioComponentBlueprint type src/index.ts "
>
StudioComponentBlueprint
-
type • src/index.ts:301:1
+
type • src/index.ts:307:1
Export paths: src/index.ts
Related symbols: None
@@ -7816,7 +9202,7 @@
StudioComponentBlueprint
data-search="StudioComponentMeta type src/index.ts StudioComponentBlueprint"
>
StudioComponentMeta
-
type • src/index.ts:306:1
+
type • src/index.ts:312:1
Export paths: src/index.ts
@@ -7874,7 +9260,7 @@
StudioComponentMeta
data-search="StudioComponentMetaRegistry unknown src/index.ts "
>
StudioComponentMetaRegistry
-
unknown • src/index.ts:313:1
+
unknown • src/index.ts:319:1
Export paths: src/index.ts
Related symbols: None
@@ -7885,7 +9271,7 @@
StudioComponentMetaRegistry
data-search="StudioContextValue type src/index.ts InsertCatalogEntry NodePlacement StudioAdminRouteId StudioLocale StudioManifest StudioMode StudioModuleId StudioNodeId StudioPanelId StudioSaveStatus StudioScreenId ThemeUpdates"
>
StudioContextValue
-
type • src/index.ts:333:1
+
type • src/index.ts:339:1
Export paths: src/index.ts
@@ -8324,7 +9710,7 @@
StudioContextValue
data-search="StudioEvent unknown src/index.ts "
>
StudioEvent
-
unknown • src/index.ts:326:1
+
unknown • src/index.ts:332:1
Export paths: src/index.ts
Related symbols: None
@@ -8335,7 +9721,7 @@
StudioEvent
data-search="StudioIdGenerator unknown src/index.ts "
>
StudioIdGenerator
-
unknown • src/index.ts:315:1
+
unknown • src/index.ts:321:1
Export paths: src/index.ts
Related symbols: None
@@ -8346,7 +9732,7 @@
StudioIdGenerator
data-search="StudioLocale unknown src/index.ts "
>
StudioLocale
-
unknown • src/index.ts:117:1
+
unknown • src/index.ts:121:1
Export paths: src/index.ts
Related symbols: None
@@ -8357,7 +9743,7 @@
StudioLocale
data-search="StudioManifest unknown src/index.ts "
>
StudioManifest
-
unknown • src/index.ts:147:1
+
unknown • src/index.ts:153:1
Export paths: src/index.ts
Related symbols: None
@@ -8368,7 +9754,7 @@
StudioManifest
data-search="StudioMode unknown src/index.ts "
>
StudioMode
-
unknown • src/index.ts:119:1
+
unknown • src/index.ts:123:1
Export paths: src/index.ts
Related symbols: None
@@ -8379,7 +9765,7 @@
StudioMode
data-search="StudioModuleId unknown src/index.ts "
>
StudioModuleId
-
unknown • src/index.ts:116:1
+
unknown • src/index.ts:120:1
Export paths: src/index.ts
Related symbols: None
@@ -8390,7 +9776,7 @@
StudioModuleId
data-search="StudioNodeId unknown src/index.ts "
>
StudioNodeId
-
unknown • src/index.ts:114:1
+
unknown • src/index.ts:118:1
Export paths: src/index.ts
Related symbols: None
@@ -8401,7 +9787,7 @@
StudioNodeId
data-search="StudioPackageBoundary type src/index.ts "
>
StudioPackageBoundary
-
type • src/index.ts:53:1
+
type • src/index.ts:54:1
Export paths: src/index.ts
Related symbols: None
@@ -8447,7 +9833,7 @@
StudioPackageBoundary
data-search="StudioPanelId unknown src/index.ts "
>
StudioPanelId
-
unknown • src/index.ts:121:1
+
unknown • src/index.ts:125:1
Export paths: src/index.ts
Related symbols: None
@@ -8458,7 +9844,7 @@
StudioPanelId
data-search="StudioProjectId unknown src/index.ts "
>
StudioProjectId
-
unknown • src/index.ts:112:1
+
unknown • src/index.ts:116:1
Export paths: src/index.ts
Related symbols: None
@@ -8469,7 +9855,7 @@
StudioProjectId
data-search="StudioPublicContract unknown src/index.ts "
>
StudioPublicContract
-
unknown • src/index.ts:110:1
+
unknown • src/index.ts:114:1
Export paths: src/index.ts
Related symbols: None
@@ -8480,7 +9866,7 @@
StudioPublicContract
data-search="StudioSaveStatus unknown src/index.ts "
>
StudioSaveStatus
-
unknown • src/index.ts:120:1
+
unknown • src/index.ts:124:1
Export paths: src/index.ts
Related symbols: None
@@ -8491,7 +9877,7 @@
StudioSaveStatus
data-search="StudioScreenId unknown src/index.ts "
>
StudioScreenId
-
unknown • src/index.ts:115:1
+
unknown • src/index.ts:119:1
Export paths: src/index.ts
Related symbols: None
@@ -8502,7 +9888,7 @@
StudioScreenId
data-search="StudioSelectionState type src/index.ts StudioAdminRouteId StudioPanelId"
>
StudioSelectionState
-
type • src/index.ts:158:1
+
type • src/index.ts:164:1
Export paths: src/index.ts
@@ -8568,7 +9954,7 @@
StudioSelectionState
data-search="StudioSessionId unknown src/index.ts "
>
StudioSessionId
-
unknown • src/index.ts:113:1
+
unknown • src/index.ts:117:1
Export paths: src/index.ts
Related symbols: None
@@ -8579,7 +9965,7 @@
StudioSessionId
data-search="StudioSessionState type src/index.ts StudioMode StudioSaveStatus"
>
StudioSessionState
-
type • src/index.ts:166:1
+
type • src/index.ts:172:1
Export paths: src/index.ts
@@ -8673,7 +10059,7 @@
StudioSessionState
data-search="ThemeUpdates unknown src/index.ts "
>
ThemeUpdates
-
unknown • src/index.ts:153:1
+
unknown • src/index.ts:159:1
Export paths: src/index.ts
Related symbols: None
@@ -8684,7 +10070,7 @@
ThemeUpdates
data-search="TPL_SCREEN_EMPTY value src/index.ts "
>
TPL_SCREEN_EMPTY
-
value • src/index.ts:470:14
+
value • src/index.ts:476:14
Export paths: src/index.ts
Related symbols: None
@@ -8695,7 +10081,7 @@
TPL_SCREEN_EMPTY
data-search="updateNodeInTree value src/index.ts (root: UiNode, id: string, newProps: Record<string, unknown>) => UiNode"
>
updateNodeInTree
-
value • src/index.ts:554:14
+
value • src/index.ts:560:14
Export paths: src/index.ts
Related symbols: None
@@ -8742,7 +10128,7 @@
Signature
data-search="validateInsertRecipe function src/index.ts InsertRecipe InsertRecipeIssue StudioComponentMetaRegistry (recipe: InsertRecipe, componentMeta: StudioComponentMetaRegistry) => InsertRecipeIssue | null"
>
validateInsertRecipe
-
function • src/index.ts:1174:1
+
function • src/index.ts:1180:1
Export paths: src/index.ts
@@ -8790,7 +10176,7 @@
Signature
data-search="validateNodePlacement function src/index.ts NodePlacement PlacementValidationResult StudioComponentMetaRegistry (args: { root: UiNode; placement: NodePlacement; childType: string; componentMeta: StudioComponentMetaRegistry; }) => PlacementValidationResult"
>
validateNodePlacement
-
function • src/index.ts:771:1
+
function • src/index.ts:777:1
Export paths: src/index.ts
@@ -10272,6 +11658,40 @@
Architecture overview
module_src_authSettings_test_ts --> module_src_authSettings_ts
module_src_authSettings_ts["src/authSettings.ts"]
package__ankhorage_studio -.-> module_src_authSettings_ts
+ module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
+ package__ankhorage_studio -.-> module_src_bindingAuthoringContracts_ts
+ module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
+ package__ankhorage_studio -.-> module_src_bindingAuthoringModel_test_ts
+ module_src_bindingAuthoringModel_test_ts --> module_src_bindingAuthoringModel_ts
+ module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingAuthoringModel_ts
+ module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingDiagnosticsModel_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingOperationModel_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingSchemaModel_ts
+ module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
+ package__ankhorage_studio -.-> module_src_bindingManifestPersistence_test_ts
+ module_src_bindingManifestPersistence_test_ts -->
+ module_src_core_studioManifestDraftModel_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_index_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_manifestSync_ts
+ module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingMetadataModel_ts
+ module_src_bindingMetadataModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
+ package__ankhorage_studio -.-> module_src_bindingMutationAcceptance_test_ts
+ module_src_bindingMutationAcceptance_test_ts -->
+ module_src_bindingAuthoringModel_ts
+ module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingMutationModel_ts
+ module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingOperationModel_ts
+ module_src_bindingOperationModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingOperationModel_ts --> module_src_bindingSchemaModel_ts
+ module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingSchemaModel_ts
+ module_src_bindingSchemaModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
package__ankhorage_studio -.-> module_src_canvasDragModel_public_test_ts
module_src_canvasDragModel_public_test_ts --> module_src_canvasDragModel_ts
@@ -11288,6 +12708,8 @@
Architecture overview
module_src_ui_admin_pages_ApisAdminPage_tsx module_src_ui_admin_AnkhAdminPage_tsx
--> module_src_ui_admin_pages_AuthAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx -->
+ module_src_ui_admin_pages_BindingsAdminPage_tsx
+ module_src_ui_admin_AnkhAdminPage_tsx -->
module_src_ui_admin_pages_OverviewAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx -->
module_src_ui_admin_pages_PropertiesAdminPage_tsx
@@ -11397,6 +12819,77 @@
Architecture overview
module_src_ui_admin_pages_adminAuthHealthFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx -->
module_src_ui_admin_pages_adminAuthSessionModel_ts
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_index_ts module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
+ package__ankhorage_studio -.->
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_BindingsAdminPage_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_bindingAuthoringModel_ts module_src_ui_admin_pages_BindingsAdminPage_tsx
+ --> module_src_core_StudioContext_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_index_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_manifestState_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
package__ankhorage_studio -.->
module_src_ui_admin_pages_DataSourceCatalogCard_tsx
@@ -11661,6 +13154,38 @@
Architecture overview
module_src_authSettings_test_ts --> module_src_authSettings_ts
module_src_authSettings_ts["src/authSettings.ts"]
package__ankhorage_studio -.-> module_src_authSettings_ts
+ module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
+ package__ankhorage_studio -.-> module_src_bindingAuthoringContracts_ts
+ module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
+ package__ankhorage_studio -.-> module_src_bindingAuthoringModel_test_ts
+ module_src_bindingAuthoringModel_test_ts --> module_src_bindingAuthoringModel_ts
+ module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingAuthoringModel_ts
+ module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingDiagnosticsModel_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingOperationModel_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingSchemaModel_ts
+ module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
+ package__ankhorage_studio -.-> module_src_bindingManifestPersistence_test_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_core_studioManifestDraftModel_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_index_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_manifestSync_ts
+ module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingMetadataModel_ts
+ module_src_bindingMetadataModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
+ package__ankhorage_studio -.-> module_src_bindingMutationAcceptance_test_ts
+ module_src_bindingMutationAcceptance_test_ts --> module_src_bindingAuthoringModel_ts
+ module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingMutationModel_ts
+ module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingOperationModel_ts
+ module_src_bindingOperationModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingOperationModel_ts --> module_src_bindingSchemaModel_ts
+ module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
+ package__ankhorage_studio -.-> module_src_bindingSchemaModel_ts
+ module_src_bindingSchemaModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
package__ankhorage_studio -.-> module_src_canvasDragModel_public_test_ts
module_src_canvasDragModel_public_test_ts --> module_src_canvasDragModel_ts
@@ -12433,6 +13958,7 @@
Architecture overview
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_studioAdminRouteModel_ts
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_ApisAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_AuthAdminPage_tsx
+ module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_BindingsAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_OverviewAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_PropertiesAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_SecretsAdminPage_tsx
@@ -12512,6 +14038,48 @@
Architecture overview
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthHealthFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthSessionModel_ts
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_index_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
+ package__ankhorage_studio -.-> module_src_ui_admin_pages_BindingsAdminPage_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_core_StudioContext_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_index_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_manifestState_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_DataSourceCatalogCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx --> module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx
@@ -12667,6 +14235,16 @@
Module relationships
module_src_authFlowContract_test_ts["src/authFlowContract.test.ts"]
module_src_authSettings_test_ts["src/authSettings.test.ts"]
module_src_authSettings_ts["src/authSettings.ts"]
+ module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
+ module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
+ module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
+ module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
+ module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
+ module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
+ module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
+ module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
+ module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
+ module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
module_src_canvasDragModel_test_ts["src/canvasDragModel.test.ts"]
module_src_canvasDragModel_ts["src/canvasDragModel.ts"]
@@ -12908,6 +14486,14 @@
Module relationships
module_src_ui_admin_pages_ApisAdminPage_tsx["src/ui/admin/pages/ApisAdminPage.tsx"]
module_src_ui_admin_pages_AuthAdminPage_test_ts["src/ui/admin/pages/AuthAdminPage.test.ts"]
module_src_ui_admin_pages_AuthAdminPage_tsx["src/ui/admin/pages/AuthAdminPage.tsx"]
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
+ module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
module_src_ui_admin_pages_DataSourceOperationsCard_tsx["src/ui/admin/pages/DataSourceOperationsCard.tsx"]
module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx["src/ui/admin/pages/ExternalApiAdminPrimitives.tsx"]
@@ -12985,9 +14571,22 @@
Module relationships
module_src_projectWorkspaceContracts_ts
module_src_app_workspace_WorkspacePrimitives_tsx -->
module_src_templateCatalogContracts_ts module_src_authSettings_test_ts -->
- module_src_authSettings_ts module_src_canvasDragModel_public_test_ts -->
- module_src_canvasDragModel_ts module_src_canvasDragModel_public_test_ts -->
- module_src_canvasDropZones_ts module_src_canvasDragModel_test_ts -->
+ module_src_authSettings_ts module_src_bindingAuthoringModel_test_ts -->
+ module_src_bindingAuthoringModel_ts module_src_bindingDiagnosticsModel_ts -->
+ module_src_bindingAuthoringContracts_ts module_src_bindingDiagnosticsModel_ts -->
+ module_src_bindingOperationModel_ts module_src_bindingDiagnosticsModel_ts -->
+ module_src_bindingSchemaModel_ts module_src_bindingManifestPersistence_test_ts
+ --> module_src_core_studioManifestDraftModel_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_index_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_manifestSync_ts
+ module_src_bindingMetadataModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingMutationAcceptance_test_ts -->
+ module_src_bindingAuthoringModel_ts module_src_bindingOperationModel_ts -->
+ module_src_bindingAuthoringContracts_ts module_src_bindingOperationModel_ts -->
+ module_src_bindingSchemaModel_ts module_src_bindingSchemaModel_ts -->
+ module_src_bindingAuthoringContracts_ts module_src_canvasDragModel_public_test_ts
+ --> module_src_canvasDragModel_ts module_src_canvasDragModel_public_test_ts
+ --> module_src_canvasDropZones_ts module_src_canvasDragModel_test_ts -->
module_src_canvasDragModel_ts module_src_canvasDragModel_test_ts -->
module_src_canvasDropZones_ts module_src_canvasDragModel_ts -->
module_src_canvasDropZones_ts module_src_canvasDragModel_ts -->
@@ -13486,6 +15085,8 @@
Module relationships
module_src_ui_admin_pages_ApisAdminPage_tsx module_src_ui_admin_AnkhAdminPage_tsx
--> module_src_ui_admin_pages_AuthAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx -->
+ module_src_ui_admin_pages_BindingsAdminPage_tsx
+ module_src_ui_admin_AnkhAdminPage_tsx -->
module_src_ui_admin_pages_OverviewAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx -->
module_src_ui_admin_pages_PropertiesAdminPage_tsx
@@ -13552,6 +15153,54 @@
Module relationships
module_src_ui_admin_pages_adminAuthHealthFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx -->
module_src_ui_admin_pages_adminAuthSessionModel_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_index_ts module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx -->
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx -->
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx -->
+ module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx -->
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_bindingAuthoringModel_ts module_src_ui_admin_pages_BindingsAdminPage_tsx
+ --> module_src_core_StudioContext_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_index_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_manifestState_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx -->
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx -->
module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx
module_src_ui_admin_pages_DataSourceOperationsCard_tsx -->
@@ -13688,6 +15337,16 @@
Module relationships
module_src_authFlowContract_test_ts["src/authFlowContract.test.ts"]
module_src_authSettings_test_ts["src/authSettings.test.ts"]
module_src_authSettings_ts["src/authSettings.ts"]
+ module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
+ module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
+ module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
+ module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
+ module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
+ module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
+ module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
+ module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
+ module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
+ module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
module_src_canvasDragModel_test_ts["src/canvasDragModel.test.ts"]
module_src_canvasDragModel_ts["src/canvasDragModel.ts"]
@@ -13929,6 +15588,14 @@
Module relationships
module_src_ui_admin_pages_ApisAdminPage_tsx["src/ui/admin/pages/ApisAdminPage.tsx"]
module_src_ui_admin_pages_AuthAdminPage_test_ts["src/ui/admin/pages/AuthAdminPage.test.ts"]
module_src_ui_admin_pages_AuthAdminPage_tsx["src/ui/admin/pages/AuthAdminPage.tsx"]
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
+ module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
module_src_ui_admin_pages_DataSourceOperationsCard_tsx["src/ui/admin/pages/DataSourceOperationsCard.tsx"]
module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx["src/ui/admin/pages/ExternalApiAdminPrimitives.tsx"]
@@ -13990,6 +15657,18 @@
Module relationships
module_src_app_workspace_WorkspacePrimitives_tsx --> module_src_projectWorkspaceContracts_ts
module_src_app_workspace_WorkspacePrimitives_tsx --> module_src_templateCatalogContracts_ts
module_src_authSettings_test_ts --> module_src_authSettings_ts
+ module_src_bindingAuthoringModel_test_ts --> module_src_bindingAuthoringModel_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingOperationModel_ts
+ module_src_bindingDiagnosticsModel_ts --> module_src_bindingSchemaModel_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_core_studioManifestDraftModel_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_index_ts
+ module_src_bindingManifestPersistence_test_ts --> module_src_manifestSync_ts
+ module_src_bindingMetadataModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingMutationAcceptance_test_ts --> module_src_bindingAuthoringModel_ts
+ module_src_bindingOperationModel_ts --> module_src_bindingAuthoringContracts_ts
+ module_src_bindingOperationModel_ts --> module_src_bindingSchemaModel_ts
+ module_src_bindingSchemaModel_ts --> module_src_bindingAuthoringContracts_ts
module_src_canvasDragModel_public_test_ts --> module_src_canvasDragModel_ts
module_src_canvasDragModel_public_test_ts --> module_src_canvasDropZones_ts
module_src_canvasDragModel_test_ts --> module_src_canvasDragModel_ts
@@ -14317,6 +15996,7 @@
Module relationships
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_studioAdminRouteModel_ts
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_ApisAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_AuthAdminPage_tsx
+ module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_BindingsAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_OverviewAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_PropertiesAdminPage_tsx
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_ui_admin_pages_SecretsAdminPage_tsx
@@ -14360,6 +16040,32 @@
Module relationships
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthHealthFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthSessionModel_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_index_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx --> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx --> module_src_ui_admin_pages_bindings_EventBindingComposer_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx --> module_src_ui_admin_pages_bindings_bindingEditorModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_ui_admin_pages_bindings_bindingAdminStyles_ts
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx --> module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_bindingAuthoringModel_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_core_StudioContext_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_index_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_manifestState_ts
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_EventBindingsCard_tsx
+ module_src_ui_admin_pages_BindingsAdminPage_tsx --> module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx
module_src_ui_admin_pages_DataSourceCatalogCard_tsx --> module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx
module_src_ui_admin_pages_DataSourceOperationsCard_tsx --> module_src_core_StudioContext_ts
module_src_ui_admin_pages_DataSourceOperationsCard_tsx --> module_src_externalApiApi_ts
@@ -14452,6 +16158,16 @@
Export graph
module_src_authFlowContract_test_ts["src/authFlowContract.test.ts"]
module_src_authSettings_test_ts["src/authSettings.test.ts"]
module_src_authSettings_ts["src/authSettings.ts"]
+ module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
+ module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
+ module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
+ module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
+ module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
+ module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
+ module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
+ module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
+ module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
+ module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
module_src_canvasDragModel_test_ts["src/canvasDragModel.test.ts"]
module_src_canvasDragModel_ts["src/canvasDragModel.ts"]
@@ -14693,6 +16409,14 @@
Export graph
module_src_ui_admin_pages_ApisAdminPage_tsx["src/ui/admin/pages/ApisAdminPage.tsx"]
module_src_ui_admin_pages_AuthAdminPage_test_ts["src/ui/admin/pages/AuthAdminPage.test.ts"]
module_src_ui_admin_pages_AuthAdminPage_tsx["src/ui/admin/pages/AuthAdminPage.tsx"]
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
+ module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
module_src_ui_admin_pages_DataSourceOperationsCard_tsx["src/ui/admin/pages/DataSourceOperationsCard.tsx"]
module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx["src/ui/admin/pages/ExternalApiAdminPrimitives.tsx"]
@@ -14729,6 +16453,11 @@
Export graph
export_StudioActionPayloadSchema export_addNodeToTree["addNodeToTree"]
module_src_index_ts --> export_addNodeToTree export_addNodeToTree -.->
export_StudioComponentMetaRegistry
+ export_appendStudioEventBinding["appendStudioEventBinding"]
+ module_src_bindingMutationModel_ts --> export_appendStudioEventBinding
+ export_assessStudioBindingCompatibility["assessStudioBindingCompatibility"]
+ module_src_bindingSchemaModel_ts --> export_assessStudioBindingCompatibility
+ export_assessStudioBindingCompatibility -.-> export_StudioBindingCompatibility
export_buildInsertCatalogEntries["buildInsertCatalogEntries"]
module_src_index_ts --> export_buildInsertCatalogEntries
export_buildInsertCatalogEntries -.-> export_InsertCatalogEntry
@@ -14739,18 +16468,37 @@
Export graph
export_StudioComponentMetaRegistry
export_cloneWithNewIds["cloneWithNewIds"] module_src_index_ts -->
export_cloneWithNewIds export_cloneWithNewIds -.-> export_StudioIdGenerator
+ export_collectStudioBindingOperationOptions["collectStudioBindingOperationOptions"]
+ module_src_bindingOperationModel_ts -->
+ export_collectStudioBindingOperationOptions
+ export_collectStudioBindingOperationOptions -.->
+ export_StudioBindingOperationOption
+ export_collectStudioResponsePaths["collectStudioResponsePaths"]
+ module_src_bindingSchemaModel_ts --> export_collectStudioResponsePaths
+ export_collectStudioResponsePaths -.-> export_StudioBindingResponsePathOption
export_createNodeFromCatalogEntry["createNodeFromCatalogEntry"]
module_src_index_ts --> export_createNodeFromCatalogEntry
export_createNodeFromCatalogEntry -.-> export_InsertCatalogEntry
export_createNodeFromCatalogEntry -.-> export_StudioComponentMetaRegistry
export_createNodeFromCatalogEntry -.-> export_StudioIdGenerator
+ export_createStudioActionInputFields["createStudioActionInputFields"]
+ module_src_bindingOperationModel_ts --> export_createStudioActionInputFields
+ export_createStudioActionInputFields -.-> export_StudioBindingInputFieldOption
export_createStudioInstancePropertyPatch["createStudioInstancePropertyPatch"]
module_src_propertiesAuthoringModel_ts -->
export_createStudioInstancePropertyPatch export_createStudioInstancePropertyPatch
-.-> export_StudioInstancePropertyValue
export_deriveProjectId["deriveProjectId"] module_src_projectIdentity_ts
- --> export_deriveProjectId export_findNodeById["findNodeById"]
- module_src_index_ts --> export_findNodeById
+ --> export_deriveProjectId
+ export_diagnoseStudioComponentBindings["diagnoseStudioComponentBindings"]
+ module_src_bindingDiagnosticsModel_ts --> export_diagnoseStudioComponentBindings
+ export_diagnoseStudioComponentBindings -.-> export_StudioBindingDiagnostic
+ export_diagnoseStudioComponentBindings -.-> export_StudioBindingOperationOption
+ export_findNodeById["findNodeById"] module_src_index_ts -->
+ export_findNodeById
+ export_findStudioBindingOperationOption["findStudioBindingOperationOption"]
+ module_src_bindingOperationModel_ts --> export_findStudioBindingOperationOption
+ export_findStudioBindingOperationOption -.-> export_StudioBindingOperationOption
export_generateStudioId["generateStudioId"] module_src_index_ts -->
export_generateStudioId
export_getInsertCatalogCategoryLabel["getInsertCatalogCategoryLabel"]
@@ -14865,6 +16613,10 @@
Export graph
module_src_projectWorkspaceContracts_ts --> export_ProjectSortKey
export_removeNodeFromTree["removeNodeFromTree"] module_src_index_ts -->
export_removeNodeFromTree
+ export_removeStudioEventBinding["removeStudioEventBinding"]
+ module_src_bindingMutationModel_ts --> export_removeStudioEventBinding
+ export_removeStudioPropBinding["removeStudioPropBinding"]
+ module_src_bindingMutationModel_ts --> export_removeStudioPropBinding
export_resolveDefaultInsertPlacement["resolveDefaultInsertPlacement"]
module_src_index_ts --> export_resolveDefaultInsertPlacement
export_resolveDefaultInsertPlacement -.-> export_PlacementResolutionResult
@@ -14878,6 +16630,12 @@
Export graph
export_resolveInsertPlacement -.-> export_PlacementKind
export_resolveInsertPlacement -.-> export_PlacementResolutionResult
export_resolveInsertPlacement -.-> export_StudioComponentMetaRegistry
+ export_resolveStudioBindableEvents["resolveStudioBindableEvents"]
+ module_src_bindingMetadataModel_ts --> export_resolveStudioBindableEvents
+ export_resolveStudioBindableEvents -.-> export_StudioBindableEventOption
+ export_resolveStudioBindableProps["resolveStudioBindableProps"]
+ module_src_bindingMetadataModel_ts --> export_resolveStudioBindableProps
+ export_resolveStudioBindableProps -.-> export_StudioBindablePropOption
export_resolveStudioInstancePropertyFields["resolveStudioInstancePropertyFields"]
module_src_propertiesAuthoringModel_ts -->
export_resolveStudioInstancePropertyFields
@@ -14890,6 +16648,8 @@
Export graph
export_resolveStudioInstancePropertyGroups -.->
export_StudioAuthoringComponentMeta export_resolveStudioInstancePropertyGroups
-.-> export_StudioInstancePropertyGroup
+ export_resolveStudioSchemaValueMeta["resolveStudioSchemaValueMeta"]
+ module_src_bindingSchemaModel_ts --> export_resolveStudioSchemaValueMeta
export_STUDIO_INSERT_RECIPES["STUDIO_INSERT_RECIPES"] module_src_index_ts
--> export_STUDIO_INSERT_RECIPES
export_STUDIO_PACKAGE_BOUNDARY["STUDIO_PACKAGE_BOUNDARY"]
@@ -14918,6 +16678,23 @@
Export graph
module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringMetaRegistry
export_StudioAuthoringPropSchema["StudioAuthoringPropSchema"]
module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringPropSchema
+ export_StudioBindableEventOption["StudioBindableEventOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindableEventOption
+ export_StudioBindablePropOption["StudioBindablePropOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindablePropOption
+ export_StudioBindingCompatibility["StudioBindingCompatibility"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingCompatibility
+ export_StudioBindingDiagnostic["StudioBindingDiagnostic"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingDiagnostic
+ export_StudioBindingInputFieldOption["StudioBindingInputFieldOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingInputFieldOption
+ export_StudioBindingOperationOption["StudioBindingOperationOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingOperationOption
+ export_StudioBindingOperationOption -.-> export_StudioBindingInputFieldOption
+ export_StudioBindingOperationOption -.-> export_StudioBindingResponsePathOption
+ export_StudioBindingResponsePathOption["StudioBindingResponsePathOption"]
+ module_src_bindingAuthoringContracts_ts -->
+ export_StudioBindingResponsePathOption
export_StudioCommand["StudioCommand"] module_src_index_ts -->
export_StudioCommand
export_StudioComponentBlueprint["StudioComponentBlueprint"]
@@ -14992,6 +16769,8 @@
Export graph
module_src_index_ts --> export_TPL_SCREEN_EMPTY
export_updateNodeInTree["updateNodeInTree"] module_src_index_ts -->
export_updateNodeInTree
+ export_upsertStudioPropBinding["upsertStudioPropBinding"]
+ module_src_bindingMutationModel_ts --> export_upsertStudioPropBinding
export_validateInsertRecipe["validateInsertRecipe"] module_src_index_ts
--> export_validateInsertRecipe export_validateInsertRecipe -.->
export_InsertRecipe export_validateInsertRecipe -.-> export_InsertRecipeIssue
@@ -15031,6 +16810,16 @@
Export graph
module_src_authFlowContract_test_ts["src/authFlowContract.test.ts"]
module_src_authSettings_test_ts["src/authSettings.test.ts"]
module_src_authSettings_ts["src/authSettings.ts"]
+ module_src_bindingAuthoringContracts_ts["src/bindingAuthoringContracts.ts"]
+ module_src_bindingAuthoringModel_test_ts["src/bindingAuthoringModel.test.ts"]
+ module_src_bindingAuthoringModel_ts["src/bindingAuthoringModel.ts"]
+ module_src_bindingDiagnosticsModel_ts["src/bindingDiagnosticsModel.ts"]
+ module_src_bindingManifestPersistence_test_ts["src/bindingManifestPersistence.test.ts"]
+ module_src_bindingMetadataModel_ts["src/bindingMetadataModel.ts"]
+ module_src_bindingMutationAcceptance_test_ts["src/bindingMutationAcceptance.test.ts"]
+ module_src_bindingMutationModel_ts["src/bindingMutationModel.ts"]
+ module_src_bindingOperationModel_ts["src/bindingOperationModel.ts"]
+ module_src_bindingSchemaModel_ts["src/bindingSchemaModel.ts"]
module_src_canvasDragModel_public_test_ts["src/canvasDragModel.public.test.ts"]
module_src_canvasDragModel_test_ts["src/canvasDragModel.test.ts"]
module_src_canvasDragModel_ts["src/canvasDragModel.ts"]
@@ -15272,6 +17061,14 @@
Export graph
module_src_ui_admin_pages_ApisAdminPage_tsx["src/ui/admin/pages/ApisAdminPage.tsx"]
module_src_ui_admin_pages_AuthAdminPage_test_ts["src/ui/admin/pages/AuthAdminPage.test.ts"]
module_src_ui_admin_pages_AuthAdminPage_tsx["src/ui/admin/pages/AuthAdminPage.tsx"]
+ module_src_ui_admin_pages_bindings_bindingAdminStyles_ts["src/ui/admin/pages/bindings/bindingAdminStyles.ts"]
+ module_src_ui_admin_pages_bindings_BindingDiagnosticsCard_tsx["src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"]
+ module_src_ui_admin_pages_bindings_bindingEditorModel_ts["src/ui/admin/pages/bindings/bindingEditorModel.ts"]
+ module_src_ui_admin_pages_bindings_EventBindingComposer_tsx["src/ui/admin/pages/bindings/EventBindingComposer.tsx"]
+ module_src_ui_admin_pages_bindings_EventBindingsCard_tsx["src/ui/admin/pages/bindings/EventBindingsCard.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingEditor_tsx["src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"]
+ module_src_ui_admin_pages_bindings_PropertyBindingsCard_tsx["src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"]
+ module_src_ui_admin_pages_BindingsAdminPage_tsx["src/ui/admin/pages/BindingsAdminPage.tsx"]
module_src_ui_admin_pages_DataSourceCatalogCard_tsx["src/ui/admin/pages/DataSourceCatalogCard.tsx"]
module_src_ui_admin_pages_DataSourceOperationsCard_tsx["src/ui/admin/pages/DataSourceOperationsCard.tsx"]
module_src_ui_admin_pages_ExternalApiAdminPrimitives_tsx["src/ui/admin/pages/ExternalApiAdminPrimitives.tsx"]
@@ -15310,6 +17107,11 @@
Export graph
export_addNodeToTree["addNodeToTree"]
module_src_index_ts --> export_addNodeToTree
export_addNodeToTree -.-> export_StudioComponentMetaRegistry
+ export_appendStudioEventBinding["appendStudioEventBinding"]
+ module_src_bindingMutationModel_ts --> export_appendStudioEventBinding
+ export_assessStudioBindingCompatibility["assessStudioBindingCompatibility"]
+ module_src_bindingSchemaModel_ts --> export_assessStudioBindingCompatibility
+ export_assessStudioBindingCompatibility -.-> export_StudioBindingCompatibility
export_buildInsertCatalogEntries["buildInsertCatalogEntries"]
module_src_index_ts --> export_buildInsertCatalogEntries
export_buildInsertCatalogEntries -.-> export_InsertCatalogEntry
@@ -15321,18 +17123,34 @@
Export graph
export_cloneWithNewIds["cloneWithNewIds"]
module_src_index_ts --> export_cloneWithNewIds
export_cloneWithNewIds -.-> export_StudioIdGenerator
+ export_collectStudioBindingOperationOptions["collectStudioBindingOperationOptions"]
+ module_src_bindingOperationModel_ts --> export_collectStudioBindingOperationOptions
+ export_collectStudioBindingOperationOptions -.-> export_StudioBindingOperationOption
+ export_collectStudioResponsePaths["collectStudioResponsePaths"]
+ module_src_bindingSchemaModel_ts --> export_collectStudioResponsePaths
+ export_collectStudioResponsePaths -.-> export_StudioBindingResponsePathOption
export_createNodeFromCatalogEntry["createNodeFromCatalogEntry"]
module_src_index_ts --> export_createNodeFromCatalogEntry
export_createNodeFromCatalogEntry -.-> export_InsertCatalogEntry
export_createNodeFromCatalogEntry -.-> export_StudioComponentMetaRegistry
export_createNodeFromCatalogEntry -.-> export_StudioIdGenerator
+ export_createStudioActionInputFields["createStudioActionInputFields"]
+ module_src_bindingOperationModel_ts --> export_createStudioActionInputFields
+ export_createStudioActionInputFields -.-> export_StudioBindingInputFieldOption
export_createStudioInstancePropertyPatch["createStudioInstancePropertyPatch"]
module_src_propertiesAuthoringModel_ts --> export_createStudioInstancePropertyPatch
export_createStudioInstancePropertyPatch -.-> export_StudioInstancePropertyValue
export_deriveProjectId["deriveProjectId"]
module_src_projectIdentity_ts --> export_deriveProjectId
+ export_diagnoseStudioComponentBindings["diagnoseStudioComponentBindings"]
+ module_src_bindingDiagnosticsModel_ts --> export_diagnoseStudioComponentBindings
+ export_diagnoseStudioComponentBindings -.-> export_StudioBindingDiagnostic
+ export_diagnoseStudioComponentBindings -.-> export_StudioBindingOperationOption
export_findNodeById["findNodeById"]
module_src_index_ts --> export_findNodeById
+ export_findStudioBindingOperationOption["findStudioBindingOperationOption"]
+ module_src_bindingOperationModel_ts --> export_findStudioBindingOperationOption
+ export_findStudioBindingOperationOption -.-> export_StudioBindingOperationOption
export_generateStudioId["generateStudioId"]
module_src_index_ts --> export_generateStudioId
export_getInsertCatalogCategoryLabel["getInsertCatalogCategoryLabel"]
@@ -15449,6 +17267,10 @@
Export graph
module_src_projectWorkspaceContracts_ts --> export_ProjectSortKey
export_removeNodeFromTree["removeNodeFromTree"]
module_src_index_ts --> export_removeNodeFromTree
+ export_removeStudioEventBinding["removeStudioEventBinding"]
+ module_src_bindingMutationModel_ts --> export_removeStudioEventBinding
+ export_removeStudioPropBinding["removeStudioPropBinding"]
+ module_src_bindingMutationModel_ts --> export_removeStudioPropBinding
export_resolveDefaultInsertPlacement["resolveDefaultInsertPlacement"]
module_src_index_ts --> export_resolveDefaultInsertPlacement
export_resolveDefaultInsertPlacement -.-> export_PlacementResolutionResult
@@ -15462,6 +17284,12 @@
Export graph
export_resolveInsertPlacement -.-> export_PlacementKind
export_resolveInsertPlacement -.-> export_PlacementResolutionResult
export_resolveInsertPlacement -.-> export_StudioComponentMetaRegistry
+ export_resolveStudioBindableEvents["resolveStudioBindableEvents"]
+ module_src_bindingMetadataModel_ts --> export_resolveStudioBindableEvents
+ export_resolveStudioBindableEvents -.-> export_StudioBindableEventOption
+ export_resolveStudioBindableProps["resolveStudioBindableProps"]
+ module_src_bindingMetadataModel_ts --> export_resolveStudioBindableProps
+ export_resolveStudioBindableProps -.-> export_StudioBindablePropOption
export_resolveStudioInstancePropertyFields["resolveStudioInstancePropertyFields"]
module_src_propertiesAuthoringModel_ts --> export_resolveStudioInstancePropertyFields
export_resolveStudioInstancePropertyFields -.-> export_StudioAuthoringComponentMeta
@@ -15470,6 +17298,8 @@
Export graph
module_src_propertiesAuthoringModel_ts --> export_resolveStudioInstancePropertyGroups
export_resolveStudioInstancePropertyGroups -.-> export_StudioAuthoringComponentMeta
export_resolveStudioInstancePropertyGroups -.-> export_StudioInstancePropertyGroup
+ export_resolveStudioSchemaValueMeta["resolveStudioSchemaValueMeta"]
+ module_src_bindingSchemaModel_ts --> export_resolveStudioSchemaValueMeta
export_STUDIO_INSERT_RECIPES["STUDIO_INSERT_RECIPES"]
module_src_index_ts --> export_STUDIO_INSERT_RECIPES
export_STUDIO_PACKAGE_BOUNDARY["STUDIO_PACKAGE_BOUNDARY"]
@@ -15498,6 +17328,22 @@
Export graph
module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringMetaRegistry
export_StudioAuthoringPropSchema["StudioAuthoringPropSchema"]
module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringPropSchema
+ export_StudioBindableEventOption["StudioBindableEventOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindableEventOption
+ export_StudioBindablePropOption["StudioBindablePropOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindablePropOption
+ export_StudioBindingCompatibility["StudioBindingCompatibility"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingCompatibility
+ export_StudioBindingDiagnostic["StudioBindingDiagnostic"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingDiagnostic
+ export_StudioBindingInputFieldOption["StudioBindingInputFieldOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingInputFieldOption
+ export_StudioBindingOperationOption["StudioBindingOperationOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingOperationOption
+ export_StudioBindingOperationOption -.-> export_StudioBindingInputFieldOption
+ export_StudioBindingOperationOption -.-> export_StudioBindingResponsePathOption
+ export_StudioBindingResponsePathOption["StudioBindingResponsePathOption"]
+ module_src_bindingAuthoringContracts_ts --> export_StudioBindingResponsePathOption
export_StudioCommand["StudioCommand"]
module_src_index_ts --> export_StudioCommand
export_StudioComponentBlueprint["StudioComponentBlueprint"]
@@ -15585,6 +17431,8 @@
Export graph
module_src_index_ts --> export_TPL_SCREEN_EMPTY
export_updateNodeInTree["updateNodeInTree"]
module_src_index_ts --> export_updateNodeInTree
+ export_upsertStudioPropBinding["upsertStudioPropBinding"]
+ module_src_bindingMutationModel_ts --> export_upsertStudioPropBinding
export_validateInsertRecipe["validateInsertRecipe"]
module_src_index_ts --> export_validateInsertRecipe
export_validateInsertRecipe -.-> export_InsertRecipe
@@ -15622,6 +17470,75 @@
addNodeToTree sequence
participant participant_canAcceptChild as canAcceptChild
participant_addNodeToTree->>participant_canAcceptChild: canAcceptChild()
participant_canAcceptChild-->>participant_addNodeToTree: return
+
+
+
+
+ appendStudioEventBinding sequence
+ diagrams/sequences/append-studio-event-binding.mmd
+
+ sequenceDiagram participant participant_appendStudioEventBinding as
+ appendStudioEventBinding participant participant_isEmptyBinding as isEmptyBinding
+ participant participant_writeBinding as writeBinding
+ participant_appendStudioEventBinding->>participant_writeBinding:
+ writeBinding() participant_writeBinding->>participant_isEmptyBinding:
+ isEmptyBinding() participant_isEmptyBinding-->>participant_writeBinding:
+ return participant_writeBinding-->>participant_appendStudioEventBinding:
+ return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_appendStudioEventBinding as appendStudioEventBinding
+ participant participant_isEmptyBinding as isEmptyBinding
+ participant participant_writeBinding as writeBinding
+ participant_appendStudioEventBinding->>participant_writeBinding: writeBinding()
+ participant_writeBinding->>participant_isEmptyBinding: isEmptyBinding()
+ participant_isEmptyBinding-->>participant_writeBinding: return
+ participant_writeBinding-->>participant_appendStudioEventBinding: return
+
+
+
+
+ assessStudioBindingCompatibility sequence
+
+ diagrams/sequences/assess-studio-binding-compatibility.mmd
+
+
+ sequenceDiagram participant participant_assessStudioBindingCompatibility as
+ assessStudioBindingCompatibility participant participant_isImageAssetShape as
+ isImageAssetShape participant participant_isObjectLike as isObjectLike
+ participant_assessStudioBindingCompatibility->>participant_isObjectLike:
+ isObjectLike()
+ participant_isObjectLike-->>participant_assessStudioBindingCompatibility:
+ return
+ participant_assessStudioBindingCompatibility->>participant_isImageAssetShape:
+ isImageAssetShape() participant_isImageAssetShape->>participant_isObjectLike:
+ isObjectLike() participant_isObjectLike-->>participant_isImageAssetShape:
+ return
+ participant_isImageAssetShape-->>participant_assessStudioBindingCompatibility:
+ return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_assessStudioBindingCompatibility as assessStudioBindingCompatibility
+ participant participant_isImageAssetShape as isImageAssetShape
+ participant participant_isObjectLike as isObjectLike
+ participant_assessStudioBindingCompatibility->>participant_isObjectLike: isObjectLike()
+ participant_isObjectLike-->>participant_assessStudioBindingCompatibility: return
+ participant_assessStudioBindingCompatibility->>participant_isImageAssetShape: isImageAssetShape()
+ participant_isImageAssetShape->>participant_isObjectLike: isObjectLike()
+ participant_isObjectLike-->>participant_isImageAssetShape: return
+ participant_isImageAssetShape-->>participant_assessStudioBindingCompatibility: return
@@ -15671,6 +17588,96 @@
cloneWithNewIds sequence
participant participant_createId as createId
participant_cloneWithNewIds->>participant_createId: createId()
participant_createId-->>participant_cloneWithNewIds: return
+
+
+
+
+ collectStudioResponsePaths sequence
+ diagrams/sequences/collect-studio-response-paths.mmd
+
+ sequenceDiagram participant participant_collectObjectPaths as collectObjectPaths
+ participant participant_collectStudioResponsePaths as collectStudioResponsePaths
+ participant participant_resolveSchemaFields as resolveSchemaFields participant
+ participant_resolveSchemaRef as resolveSchemaRef participant
+ participant_resolveSchemaType as resolveSchemaType participant
+ participant_resolveSingleSchemaType as resolveSingleSchemaType participant
+ participant_resolveStudioSchemaValueMeta as resolveStudioSchemaValueMeta
+ participant_collectStudioResponsePaths->>participant_resolveStudioSchemaValueMeta:
+ resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaRef:
+ resolveSchemaRef()
+ participant_resolveSchemaRef->>participant_resolveSchemaRef:
+ resolveSchemaRef()
+ participant_resolveSchemaRef-->>participant_resolveSchemaRef: return
+ participant_resolveSchemaRef-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaType:
+ resolveSchemaType()
+ participant_resolveSchemaType->>participant_resolveSingleSchemaType:
+ resolveSingleSchemaType()
+ participant_resolveSingleSchemaType-->>participant_resolveSchemaType: return
+ participant_resolveSchemaType-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaFields:
+ resolveSchemaFields()
+ participant_resolveSchemaFields-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveStudioSchemaValueMeta:
+ resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta-->>participant_collectStudioResponsePaths:
+ return
+ participant_collectStudioResponsePaths->>participant_collectObjectPaths:
+ collectObjectPaths()
+ participant_collectObjectPaths->>participant_resolveSchemaRef:
+ resolveSchemaRef()
+ participant_resolveSchemaRef-->>participant_collectObjectPaths: return
+ participant_collectObjectPaths->>participant_resolveStudioSchemaValueMeta:
+ resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta-->>participant_collectObjectPaths:
+ return participant_collectObjectPaths->>participant_collectObjectPaths:
+ collectObjectPaths()
+ participant_collectObjectPaths-->>participant_collectObjectPaths: return
+ participant_collectObjectPaths-->>participant_collectStudioResponsePaths:
+ return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_collectObjectPaths as collectObjectPaths
+ participant participant_collectStudioResponsePaths as collectStudioResponsePaths
+ participant participant_resolveSchemaFields as resolveSchemaFields
+ participant participant_resolveSchemaRef as resolveSchemaRef
+ participant participant_resolveSchemaType as resolveSchemaType
+ participant participant_resolveSingleSchemaType as resolveSingleSchemaType
+ participant participant_resolveStudioSchemaValueMeta as resolveStudioSchemaValueMeta
+ participant_collectStudioResponsePaths->>participant_resolveStudioSchemaValueMeta: resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaRef: resolveSchemaRef()
+ participant_resolveSchemaRef->>participant_resolveSchemaRef: resolveSchemaRef()
+ participant_resolveSchemaRef-->>participant_resolveSchemaRef: return
+ participant_resolveSchemaRef-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaType: resolveSchemaType()
+ participant_resolveSchemaType->>participant_resolveSingleSchemaType: resolveSingleSchemaType()
+ participant_resolveSingleSchemaType-->>participant_resolveSchemaType: return
+ participant_resolveSchemaType-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaFields: resolveSchemaFields()
+ participant_resolveSchemaFields-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveStudioSchemaValueMeta: resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta-->>participant_collectStudioResponsePaths: return
+ participant_collectStudioResponsePaths->>participant_collectObjectPaths: collectObjectPaths()
+ participant_collectObjectPaths->>participant_resolveSchemaRef: resolveSchemaRef()
+ participant_resolveSchemaRef-->>participant_collectObjectPaths: return
+ participant_collectObjectPaths->>participant_resolveStudioSchemaValueMeta: resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta-->>participant_collectObjectPaths: return
+ participant_collectObjectPaths->>participant_collectObjectPaths: collectObjectPaths()
+ participant_collectObjectPaths-->>participant_collectObjectPaths: return
+ participant_collectObjectPaths-->>participant_collectStudioResponsePaths: return
@@ -15714,6 +17721,32 @@
createNodeFromCatalogEntry sequence
participant_createNodeFromRecipe-->>participant_createNodeFromCatalogEntry: return
participant_createNodeFromCatalogEntry->>participant_createId: createId()
participant_createId-->>participant_createNodeFromCatalogEntry: return
+
+
+
+
+ diagnoseStudioComponentBindings sequence
+
+ diagrams/sequences/diagnose-studio-component-bindings.mmd
+
+
+ sequenceDiagram participant participant_diagnoseStudioComponentBindings as
+ diagnoseStudioComponentBindings participant participant_diagnostic as diagnostic
+ participant_diagnoseStudioComponentBindings->>participant_diagnostic:
+ diagnostic()
+ participant_diagnostic-->>participant_diagnoseStudioComponentBindings: return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_diagnoseStudioComponentBindings as diagnoseStudioComponentBindings
+ participant participant_diagnostic as diagnostic
+ participant_diagnoseStudioComponentBindings->>participant_diagnostic: diagnostic()
+ participant_diagnostic-->>participant_diagnoseStudioComponentBindings: return
@@ -15735,6 +17768,65 @@
findNodeById sequence
participant participant_findNodeById as findNodeById
participant_findNodeById->>participant_findNodeById: findNodeById()
participant_findNodeById-->>participant_findNodeById: return
+
+
+
+
+ removeStudioEventBinding sequence
+ diagrams/sequences/remove-studio-event-binding.mmd
+
+ sequenceDiagram participant participant_isEmptyBinding as isEmptyBinding participant
+ participant_removeStudioEventBinding as removeStudioEventBinding participant
+ participant_writeBinding as writeBinding
+ participant_removeStudioEventBinding->>participant_writeBinding:
+ writeBinding() participant_writeBinding->>participant_isEmptyBinding:
+ isEmptyBinding() participant_isEmptyBinding-->>participant_writeBinding:
+ return participant_writeBinding-->>participant_removeStudioEventBinding:
+ return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_isEmptyBinding as isEmptyBinding
+ participant participant_removeStudioEventBinding as removeStudioEventBinding
+ participant participant_writeBinding as writeBinding
+ participant_removeStudioEventBinding->>participant_writeBinding: writeBinding()
+ participant_writeBinding->>participant_isEmptyBinding: isEmptyBinding()
+ participant_isEmptyBinding-->>participant_writeBinding: return
+ participant_writeBinding-->>participant_removeStudioEventBinding: return
+
+
+
+
+ removeStudioPropBinding sequence
+ diagrams/sequences/remove-studio-prop-binding.mmd
+
+ sequenceDiagram participant participant_isEmptyBinding as isEmptyBinding participant
+ participant_removeStudioPropBinding as removeStudioPropBinding participant
+ participant_writeBinding as writeBinding
+ participant_removeStudioPropBinding->>participant_writeBinding: writeBinding()
+ participant_writeBinding->>participant_isEmptyBinding: isEmptyBinding()
+ participant_isEmptyBinding-->>participant_writeBinding: return
+ participant_writeBinding-->>participant_removeStudioPropBinding: return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_isEmptyBinding as isEmptyBinding
+ participant participant_removeStudioPropBinding as removeStudioPropBinding
+ participant participant_writeBinding as writeBinding
+ participant_removeStudioPropBinding->>participant_writeBinding: writeBinding()
+ participant_writeBinding->>participant_isEmptyBinding: isEmptyBinding()
+ participant_isEmptyBinding-->>participant_writeBinding: return
+ participant_writeBinding-->>participant_removeStudioPropBinding: return
@@ -15764,6 +17856,67 @@
resolveStudioInstancePropertyGroups sequence
participant participant_resolveStudioInstancePropertyGroups as resolveStudioInstancePropertyGroups
participant_resolveStudioInstancePropertyGroups->>participant_resolveStudioInstancePropertyFields: resolveStudioInstancePropertyFields()
participant_resolveStudioInstancePropertyFields-->>participant_resolveStudioInstancePropertyGroups: return
+
+
+
+
+ resolveStudioSchemaValueMeta sequence
+
+ diagrams/sequences/resolve-studio-schema-value-meta.mmd
+
+
+ sequenceDiagram participant participant_resolveSchemaFields as resolveSchemaFields
+ participant participant_resolveSchemaRef as resolveSchemaRef participant
+ participant_resolveSchemaType as resolveSchemaType participant
+ participant_resolveSingleSchemaType as resolveSingleSchemaType participant
+ participant_resolveStudioSchemaValueMeta as resolveStudioSchemaValueMeta
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaRef:
+ resolveSchemaRef()
+ participant_resolveSchemaRef->>participant_resolveSchemaRef:
+ resolveSchemaRef()
+ participant_resolveSchemaRef-->>participant_resolveSchemaRef: return
+ participant_resolveSchemaRef-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaType:
+ resolveSchemaType()
+ participant_resolveSchemaType->>participant_resolveSingleSchemaType:
+ resolveSingleSchemaType()
+ participant_resolveSingleSchemaType-->>participant_resolveSchemaType: return
+ participant_resolveSchemaType-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaFields:
+ resolveSchemaFields()
+ participant_resolveSchemaFields-->>participant_resolveStudioSchemaValueMeta:
+ return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveStudioSchemaValueMeta:
+ resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta-->>participant_resolveStudioSchemaValueMeta:
+ return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_resolveSchemaFields as resolveSchemaFields
+ participant participant_resolveSchemaRef as resolveSchemaRef
+ participant participant_resolveSchemaType as resolveSchemaType
+ participant participant_resolveSingleSchemaType as resolveSingleSchemaType
+ participant participant_resolveStudioSchemaValueMeta as resolveStudioSchemaValueMeta
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaRef: resolveSchemaRef()
+ participant_resolveSchemaRef->>participant_resolveSchemaRef: resolveSchemaRef()
+ participant_resolveSchemaRef-->>participant_resolveSchemaRef: return
+ participant_resolveSchemaRef-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaType: resolveSchemaType()
+ participant_resolveSchemaType->>participant_resolveSingleSchemaType: resolveSingleSchemaType()
+ participant_resolveSingleSchemaType-->>participant_resolveSchemaType: return
+ participant_resolveSchemaType-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveSchemaFields: resolveSchemaFields()
+ participant_resolveSchemaFields-->>participant_resolveStudioSchemaValueMeta: return
+ participant_resolveStudioSchemaValueMeta->>participant_resolveStudioSchemaValueMeta: resolveStudioSchemaValueMeta()
+ participant_resolveStudioSchemaValueMeta-->>participant_resolveStudioSchemaValueMeta: return
@@ -15787,6 +17940,35 @@
updateNodeInTree sequence
participant participant_updateNodeInTree as updateNodeInTree
participant_updateNodeInTree->>participant_isStyleRecord: isStyleRecord()
participant_isStyleRecord-->>participant_updateNodeInTree: return
+
+
+
+
+ upsertStudioPropBinding sequence
+ diagrams/sequences/upsert-studio-prop-binding.mmd
+
+ sequenceDiagram participant participant_isEmptyBinding as isEmptyBinding participant
+ participant_upsertStudioPropBinding as upsertStudioPropBinding participant
+ participant_writeBinding as writeBinding
+ participant_upsertStudioPropBinding->>participant_writeBinding: writeBinding()
+ participant_writeBinding->>participant_isEmptyBinding: isEmptyBinding()
+ participant_isEmptyBinding-->>participant_writeBinding: return
+ participant_writeBinding-->>participant_upsertStudioPropBinding: return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_isEmptyBinding as isEmptyBinding
+ participant participant_upsertStudioPropBinding as upsertStudioPropBinding
+ participant participant_writeBinding as writeBinding
+ participant_upsertStudioPropBinding->>participant_writeBinding: writeBinding()
+ participant_writeBinding->>participant_isEmptyBinding: isEmptyBinding()
+ participant_isEmptyBinding-->>participant_writeBinding: return
+ participant_writeBinding-->>participant_upsertStudioPropBinding: return
@@ -16428,44 +18610,344 @@
readCallbackRoute
src/authSettings.ts:473:1
No description available.
-
- readStringArray
- src/authSettings.ts:489:1
+
+ readStringArray
+ src/authSettings.ts:489:1
+ No description available.
+
+
+ readOptionalStringRecord
+ src/authSettings.ts:512:1
+ No description available.
+
+
+ readOptionalIcon
+ src/authSettings.ts:526:1
+ No description available.
+
+
+ findForbiddenInlineSecretPath
+ src/authSettings.ts:561:1
+ No description available.
+
+
+ hasOnlyKeys
+ src/authSettings.ts:581:1
+ No description available.
+
+
+ asRecord
+ src/authSettings.ts:586:1
+ No description available.
+
+
+ success
+ src/authSettings.ts:592:1
+ No description available.
+
+
+ invalid
+ src/authSettings.ts:596:1
+ No description available.
+
+
+
+
+
+ src/bindingDiagnosticsModel.ts
+
+ diagnoseStudioComponentBindings
+ src/bindingDiagnosticsModel.ts:20:1
+ No description available.
+
+
+ diagnosePropBinding
+ src/bindingDiagnosticsModel.ts:46:1
+ No description available.
+
+
+ diagnoseEventBinding
+ src/bindingDiagnosticsModel.ts:86:1
+ No description available.
+
+
+ diagnoseEventInputs
+ src/bindingDiagnosticsModel.ts:112:1
+ No description available.
+
+
+ diagnoseInputCompatibility
+ src/bindingDiagnosticsModel.ts:135:1
+ No description available.
+
+
+ resolveEventSourceValue
+ src/bindingDiagnosticsModel.ts:160:1
+ No description available.
+
+
+ missingOperationDiagnostic
+ src/bindingDiagnosticsModel.ts:175:1
+ No description available.
+
+
+ toBindableType
+ src/bindingDiagnosticsModel.ts:185:1
+ No description available.
+
+
+ diagnostic
+ src/bindingDiagnosticsModel.ts:198:1
+ No description available.
+
+
+
+
+
+ src/bindingManifestPersistence.test.ts
+
+ createManifest
+ src/bindingManifestPersistence.test.ts:8:1
+ No description available.
+
+
+
+
+
+
+ src/bindingMutationModel.ts
+
+ upsertStudioPropBinding
+ src/bindingMutationModel.ts:9:1
+ No description available.
+
+
+ removeStudioPropBinding
+ src/bindingMutationModel.ts:22:1
+ No description available.
+
+
+ appendStudioEventBinding
+ src/bindingMutationModel.ts:34:1
+ No description available.
+
+
+ removeStudioEventBinding
+ src/bindingMutationModel.ts:50:1
+ No description available.
+
+
+ writeBinding
+ src/bindingMutationModel.ts:66:1
+ No description available.
+
+
+ isEmptyBinding
+ src/bindingMutationModel.ts:82:1
+ No description available.
+
+
+
+
+
+ src/bindingOperationModel.ts
+
+ collectStudioBindingOperationOptions
+ src/bindingOperationModel.ts:16:1
+ No description available.
+
+
+ findStudioBindingOperationOption
+ src/bindingOperationModel.ts:24:1
+ No description available.
+
+
+ collectSourceOperations
+ src/bindingOperationModel.ts:36:1
+ No description available.
+
+
+ collectOperationInputFields
+ src/bindingOperationModel.ts:55:1
+ No description available.
+
+
+ resolveSlotSchema
+ src/bindingOperationModel.ts:83:1
+ No description available.
+
+
+ describeSource
+ src/bindingOperationModel.ts:90:1
+ No description available.
+
+
+ createStudioActionInputFields
+ src/bindingOperationModel.ts:95:1
+ No description available.
+
+
+ toBindableType
+ src/bindingOperationModel.ts:113:1
+ No description available.
+
+
+
+
+
+ src/bindingSchemaModel.ts
+
+ resolveStudioSchemaValueMeta
+ src/bindingSchemaModel.ts:14:1
+ No description available.
+
+
+ collectStudioResponsePaths
+ src/bindingSchemaModel.ts:33:1
+ No description available.
+
+
+ assessStudioBindingCompatibility
+ src/bindingSchemaModel.ts:43:1
No description available.
-
- readOptionalStringRecord
- src/authSettings.ts:512:1
+
+ collectObjectPaths
+ src/bindingSchemaModel.ts:58:1
No description available.
-
- readOptionalIcon
- src/authSettings.ts:526:1
+
+ resolveSchemaRef
+ src/bindingSchemaModel.ts:78:1
No description available.
-
- findForbiddenInlineSecretPath
- src/authSettings.ts:561:1
+
+ resolveSchemaFields
+ src/bindingSchemaModel.ts:88:1
No description available.
-
- hasOnlyKeys
- src/authSettings.ts:581:1
+
+ resolveSchemaType
+ src/bindingSchemaModel.ts:100:1
No description available.
-
- asRecord
- src/authSettings.ts:586:1
+
+ resolveSingleSchemaType
+ src/bindingSchemaModel.ts:118:1
No description available.
-
- success
- src/authSettings.ts:592:1
+
+ isObjectLike
+ src/bindingSchemaModel.ts:123:1
No description available.
-
- invalid
- src/authSettings.ts:596:1
+
+ isImageAssetShape
+ src/bindingSchemaModel.ts:127:1
No description available.
@@ -21879,167 +24361,167 @@ createRoot
src/index.ts
generateStudioId
- src/index.ts:518:14
+ src/index.ts:524:14
No description available.
cloneWithNewIds
- src/index.ts:525:14
+ src/index.ts:531:14
No description available.
findNodeById
- src/index.ts:542:14
+ src/index.ts:548:14
No description available.
updateNodeInTree
- src/index.ts:554:14
+ src/index.ts:560:14
No description available.
removeNodeFromTree
- src/index.ts:582:14
+ src/index.ts:588:14
No description available.
addNodeToTree
- src/index.ts:600:14
+ src/index.ts:606:14
No description available.
moveNodeInTree
- src/index.ts:633:14
+ src/index.ts:639:14
No description available.
findNodeWithParent
- src/index.ts:669:1
+ src/index.ts:675:1
No description available.
visit
- src/index.ts:674:9
+ src/index.ts:680:9
No description available.
isDescendantNode
- src/index.ts:693:1
+ src/index.ts:699:1
No description available.
removeNodeForMove
- src/index.ts:704:1
+ src/index.ts:710:1
No description available.
canAcceptChild
- src/index.ts:759:1
+ src/index.ts:765:1
No description available.
validateNodePlacement
- src/index.ts:771:1
+ src/index.ts:777:1
No description available.
resolveInsertPlacement
- src/index.ts:826:1
+ src/index.ts:832:1
No description available.
resolveDefaultInsertPlacement
- src/index.ts:887:1
+ src/index.ts:893:1
No description available.
insertChildAtIndex
- src/index.ts:944:1
+ src/index.ts:950:1
No description available.
insertNodeAtPlacement
- src/index.ts:989:1
+ src/index.ts:995:1
No description available.
getAdjustedMovePlacement
- src/index.ts:1028:1
+ src/index.ts:1034:1
No description available.
moveNodeToPlacement
- src/index.ts:1057:1
+ src/index.ts:1063:1
No description available.
getInsertCatalogCategoryLabel
- src/index.ts:1157:1
+ src/index.ts:1163:1
No description available.
resolveCategoryOrder
- src/index.ts:1161:1
+ src/index.ts:1167:1
No description available.
describeInsertRecipeIssue
- src/index.ts:1166:1
+ src/index.ts:1172:1
No description available.
validateInsertRecipe
- src/index.ts:1174:1
+ src/index.ts:1180:1
No description available.
visit
- src/index.ts:1178:9
+ src/index.ts:1184:9
No description available.
createNodeFromRecipe
- src/index.ts:1211:1
+ src/index.ts:1217:1
No description available.
buildNode
- src/index.ts:1216:9
+ src/index.ts:1222:9
No description available.
createNodeFromCatalogEntry
- src/index.ts:1231:1
+ src/index.ts:1237:1
No description available.
createComponentEntry
- src/index.ts:1251:1
+ src/index.ts:1257:1
No description available.
createRecipeEntry
- src/index.ts:1274:1
+ src/index.ts:1280:1
No description available.
buildInsertCatalogEntries
- src/index.ts:1312:1
+ src/index.ts:1318:1
No description available.
resolvePlacementForEntry
- src/index.ts:1338:1
+ src/index.ts:1344:1
No description available.
resolveInsertCatalogEntries
- src/index.ts:1354:1
+ src/index.ts:1360:1
No description available.
isStyleRecord
- src/index.ts:1403:1
+ src/index.ts:1409:1
No description available.
@@ -24238,7 +26720,7 @@ src/studioAdminRouteModel.ts
data-search="getStudioAdminRouteDefinition src/studioAdminRouteModel.ts "
>
getStudioAdminRouteDefinition
- src/studioAdminRouteModel.ts:131:1
+ src/studioAdminRouteModel.ts:142:1
No description available.
getStudioAdminRouteDefinition
data-search="resolveStudioAdminRouteId src/studioAdminRouteModel.ts "
>
resolveStudioAdminRouteId
- src/studioAdminRouteModel.ts:142:1
+ src/studioAdminRouteModel.ts:153:1
No description available.
resolveStudioAdminRouteId
data-search="resolveStudioAdminRoutePath src/studioAdminRouteModel.ts "
>
resolveStudioAdminRoutePath
- src/studioAdminRouteModel.ts:154:1
+ src/studioAdminRouteModel.ts:172:1
+ No description available.
+
+
+ resolveStudioBindingsNodeId
+ src/studioAdminRouteModel.ts:187:1
+ No description available.
+
+
+ createStudioBindingsRoutePath
+ src/studioAdminRouteModel.ts:191:1
No description available.
resolveStudioAdminRoutePath
data-search="resolveStudioPropertiesNodeId src/studioAdminRouteModel.ts "
>
resolveStudioPropertiesNodeId
- src/studioAdminRouteModel.ts:165:1
+ src/studioAdminRouteModel.ts:195:1
No description available.
resolveStudioPropertiesNodeId
data-search="createStudioPropertiesRoutePath src/studioAdminRouteModel.ts "
>
createStudioPropertiesRoutePath
- src/studioAdminRouteModel.ts:182:1
+ src/studioAdminRouteModel.ts:199:1
No description available.
createStudioPropertiesRoutePath
data-search="createStudioAdminRoutePath src/studioAdminRouteModel.ts "
>
createStudioAdminRoutePath
- src/studioAdminRouteModel.ts:186:1
+ src/studioAdminRouteModel.ts:203:1
No description available.
createStudioAdminRoutePath
data-search="isStudioAdminRouteAvailable src/studioAdminRouteModel.ts "
>
isStudioAdminRouteAvailable
- src/studioAdminRouteModel.ts:197:1
+ src/studioAdminRouteModel.ts:217:1
No description available.
isStudioAdminRouteAvailable
data-search="resolveStudioAdminActiveRouteId src/studioAdminRouteModel.ts "
>
resolveStudioAdminActiveRouteId
- src/studioAdminRouteModel.ts:208:1
+ src/studioAdminRouteModel.ts:228:1
No description available.
resolveStudioAdminActiveRouteId
data-search="isStudioAdminRouteActive src/studioAdminRouteModel.ts "
>
isStudioAdminRouteActive
- src/studioAdminRouteModel.ts:212:1
+ src/studioAdminRouteModel.ts:232:1
No description available.
isStudioAdminRouteActive
data-search="createStudioAdminRouteRenderState src/studioAdminRouteModel.ts "
>
createStudioAdminRouteRenderState
- src/studioAdminRouteModel.ts:229:1
+ src/studioAdminRouteModel.ts:249:1
No description available.
openStudioAdminRoute
- src/studioAdminRouteModel.ts:247:1
+ src/studioAdminRouteModel.ts:268:1
No description available.
isStudioAdminPath
- src/studioAdminRouteModel.ts:264:1
+ src/studioAdminRouteModel.ts:285:1
No description available.
isStudioAdminPath
data-search="resolveStudioNavigableLocation src/studioAdminRouteModel.ts "
>
resolveStudioNavigableLocation
- src/studioAdminRouteModel.ts:268:1
+ src/studioAdminRouteModel.ts:289:1
No description available.
resolveStudioNavigableLocation
data-search="resolveStudioLastNonAdminLocation src/studioAdminRouteModel.ts "
>
resolveStudioLastNonAdminLocation
- src/studioAdminRouteModel.ts:278:1
+ src/studioAdminRouteModel.ts:299:1
+ No description available.
+
+
+ resolveStudioContextNodeId
+ src/studioAdminRouteModel.ts:307:1
No description available.
@@ -24493,7 +26999,7 @@
KeyValue
src/ui/admin/AnkhAdminPage.tsx
AnkhAdminPage
- src/ui/admin/AnkhAdminPage.tsx:67:1
+ src/ui/admin/AnkhAdminPage.tsx:74:1
No description available.
@@ -25179,6 +27685,304 @@
Message
+
+
+ src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx
+
+ BindingDiagnosticsCard
+
+ src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx:7:1
+
+ No description available.
+
+
+
+
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts
+
+ createStudioPropBindingForSource
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:29:1
+
+ No description available.
+
+
+ createStudioEventBinding
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:44:1
+
+ No description available.
+
+
+ createStudioEventInputDrafts
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:60:1
+
+ No description available.
+
+
+ parseStudioBindingLiteral
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:77:1
+
+ No description available.
+
+
+ formatStudioBindingLiteral
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:90:1
+
+ No description available.
+
+
+ createStudioOperationKey
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:94:1
+
+ No description available.
+
+
+ findStudioOperationByKey
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:99:1
+
+ No description available.
+
+
+ createStudioEventInputMap
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:106:1
+
+ No description available.
+
+
+ createDefaultBindingValue
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:129:1
+
+ No description available.
+
+
+ parseStructuredValue
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:137:1
+
+ No description available.
+
+
+ isBindingValue
+
+ src/ui/admin/pages/bindings/bindingEditorModel.ts:146:1
+
+ No description available.
+
+
+
+
+
+ src/ui/admin/pages/bindings/EventBindingComposer.tsx
+
+ EventBindingComposer
+
+ src/ui/admin/pages/bindings/EventBindingComposer.tsx:36:1
+
+ No description available.
+
+
+ add
+
+ src/ui/admin/pages/bindings/EventBindingComposer.tsx:62:9
+
+ No description available.
+
+
+ EventInputDrafts
+
+ src/ui/admin/pages/bindings/EventBindingComposer.tsx:118:1
+
+ No description available.
+
+
+
+
+
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx
+
+ EventBindingsCard
+
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx:14:1
+
+ No description available.
+
+
+ EventPayloadSummary
+
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx:77:1
+
+ No description available.
+
+
+ describeEventBinding
+
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx:89:1
+
+ No description available.
+
+
+ describeBindingInput
+
+ src/ui/admin/pages/bindings/EventBindingsCard.tsx:100:1
+
+ No description available.
+
+
+
+
+
+ src/ui/admin/pages/bindings/PropertyBindingEditor.tsx
+
+ PropertyBindingEditor
+
+ src/ui/admin/pages/bindings/PropertyBindingEditor.tsx:22:1
+
+ No description available.
+
+
+ PropertyBindingSourceFields
+
+ src/ui/admin/pages/bindings/PropertyBindingEditor.tsx:78:1
+
+ No description available.
+
+
+
+
+
+ src/ui/admin/pages/bindings/PropertyBindingsCard.tsx
+
+ PropertyBindingsCard
+
+ src/ui/admin/pages/bindings/PropertyBindingsCard.tsx:15:1
+
+ No description available.
+
+
+
+
+
+ src/ui/admin/pages/BindingsAdminPage.tsx
+
+ BindingsAdminPage
+ src/ui/admin/pages/BindingsAdminPage.tsx:19:1
+ No description available.
+
+
+
src/ui/useStudioAppBarAugmentation.ts
data-search="useStudioAppBarAugmentation src/ui/useStudioAppBarAugmentation.ts "
>
useStudioAppBarAugmentation
- src/ui/useStudioAppBarAugmentation.ts:21:1
+ src/ui/useStudioAppBarAugmentation.ts:22:1
No description available.
diff --git a/paradox/paradox.json b/paradox/paradox.json
index 8bd10b40..a6d55882 100644
--- a/paradox/paradox.json
+++ b/paradox/paradox.json
@@ -12,7 +12,7 @@
{
"id": "npm",
"label": "npm",
- "value": "v0.12.0",
+ "value": "v0.13.0",
"color": "cb3837"
},
{
@@ -253,6 +253,116 @@
"validateStudioAuthSettings"
]
},
+ {
+ "path": "src/bindingAuthoringContracts.ts",
+ "isEntrypoint": false,
+ "dependencies": [],
+ "exports": [
+ "StudioBindableEventOption",
+ "StudioBindablePropOption",
+ "StudioBindingCompatibility",
+ "StudioBindingDiagnostic",
+ "StudioBindingInputFieldOption",
+ "StudioBindingOperationOption",
+ "StudioBindingResponsePathOption"
+ ]
+ },
+ {
+ "path": "src/bindingAuthoringModel.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/bindingAuthoringModel.ts"],
+ "exports": []
+ },
+ {
+ "path": "src/bindingAuthoringModel.ts",
+ "isEntrypoint": false,
+ "dependencies": [],
+ "exports": [
+ "appendStudioEventBinding",
+ "assessStudioBindingCompatibility",
+ "collectStudioBindingOperationOptions",
+ "collectStudioResponsePaths",
+ "createStudioActionInputFields",
+ "diagnoseStudioComponentBindings",
+ "findStudioBindingOperationOption",
+ "removeStudioEventBinding",
+ "removeStudioPropBinding",
+ "resolveStudioBindableEvents",
+ "resolveStudioBindableProps",
+ "resolveStudioSchemaValueMeta",
+ "StudioBindableEventOption",
+ "StudioBindablePropOption",
+ "StudioBindingCompatibility",
+ "StudioBindingDiagnostic",
+ "StudioBindingInputFieldOption",
+ "StudioBindingOperationOption",
+ "StudioBindingResponsePathOption",
+ "upsertStudioPropBinding"
+ ]
+ },
+ {
+ "path": "src/bindingDiagnosticsModel.ts",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringContracts.ts",
+ "src/bindingOperationModel.ts",
+ "src/bindingSchemaModel.ts"
+ ],
+ "exports": ["diagnoseStudioComponentBindings"]
+ },
+ {
+ "path": "src/bindingManifestPersistence.test.ts",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/core/studioManifestDraftModel.ts",
+ "src/index.ts",
+ "src/manifestSync.ts"
+ ],
+ "exports": []
+ },
+ {
+ "path": "src/bindingMetadataModel.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/bindingAuthoringContracts.ts"],
+ "exports": ["resolveStudioBindableEvents", "resolveStudioBindableProps"]
+ },
+ {
+ "path": "src/bindingMutationAcceptance.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/bindingAuthoringModel.ts"],
+ "exports": []
+ },
+ {
+ "path": "src/bindingMutationModel.ts",
+ "isEntrypoint": false,
+ "dependencies": [],
+ "exports": [
+ "appendStudioEventBinding",
+ "removeStudioEventBinding",
+ "removeStudioPropBinding",
+ "upsertStudioPropBinding"
+ ]
+ },
+ {
+ "path": "src/bindingOperationModel.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/bindingAuthoringContracts.ts", "src/bindingSchemaModel.ts"],
+ "exports": [
+ "collectStudioBindingOperationOptions",
+ "createStudioActionInputFields",
+ "findStudioBindingOperationOption"
+ ]
+ },
+ {
+ "path": "src/bindingSchemaModel.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/bindingAuthoringContracts.ts"],
+ "exports": [
+ "assessStudioBindingCompatibility",
+ "collectStudioResponsePaths",
+ "resolveStudioSchemaValueMeta"
+ ]
+ },
{
"path": "src/canvasDragModel.public.test.ts",
"isEntrypoint": false,
@@ -1629,13 +1739,20 @@
"ACTION_REGISTRY",
"ActionDefinition",
"addNodeToTree",
+ "appendStudioEventBinding",
+ "assessStudioBindingCompatibility",
"buildInsertCatalogEntries",
"canAcceptChild",
"cloneWithNewIds",
+ "collectStudioBindingOperationOptions",
+ "collectStudioResponsePaths",
"createNodeFromCatalogEntry",
+ "createStudioActionInputFields",
"createStudioInstancePropertyPatch",
"deriveProjectId",
+ "diagnoseStudioComponentBindings",
"findNodeById",
+ "findStudioBindingOperationOption",
"generateStudioId",
"getInsertCatalogCategoryLabel",
"InsertCatalogComponentEntry",
@@ -1678,11 +1795,16 @@
"ProjectSecretUsageSummary",
"ProjectSortKey",
"removeNodeFromTree",
+ "removeStudioEventBinding",
+ "removeStudioPropBinding",
"resolveDefaultInsertPlacement",
"resolveInsertCatalogEntries",
"resolveInsertPlacement",
+ "resolveStudioBindableEvents",
+ "resolveStudioBindableProps",
"resolveStudioInstancePropertyFields",
"resolveStudioInstancePropertyGroups",
+ "resolveStudioSchemaValueMeta",
"STUDIO_INSERT_RECIPES",
"STUDIO_PACKAGE_BOUNDARY",
"STUDIO_PACKAGE_NAME",
@@ -1696,6 +1818,13 @@
"StudioAuthoringComponentMeta",
"StudioAuthoringMetaRegistry",
"StudioAuthoringPropSchema",
+ "StudioBindableEventOption",
+ "StudioBindablePropOption",
+ "StudioBindingCompatibility",
+ "StudioBindingDiagnostic",
+ "StudioBindingInputFieldOption",
+ "StudioBindingOperationOption",
+ "StudioBindingResponsePathOption",
"StudioCommand",
"StudioComponentBlueprint",
"StudioComponentMeta",
@@ -1729,6 +1858,7 @@
"ThemeUpdates",
"TPL_SCREEN_EMPTY",
"updateNodeInTree",
+ "upsertStudioPropBinding",
"validateInsertRecipe",
"validateNodePlacement",
"validateProjectCreationInput"
@@ -2091,19 +2221,26 @@
"AnkhAdminPage",
"AnkhAdminShell",
"AnkhStudio",
+ "appendStudioEventBinding",
"assertMetadataOnlyResponse",
+ "assessStudioBindingCompatibility",
"buildInsertCatalogEntries",
"canAcceptChild",
"cloneWithNewIds",
+ "collectStudioBindingOperationOptions",
+ "collectStudioResponsePaths",
"CreateCategoriesScreen",
"CreateCategoryTemplatesScreen",
"createNodeFromCatalogEntry",
"CreateProjectFromTemplateScreen",
+ "createStudioActionInputFields",
"createStudioInstancePropertyPatch",
"deriveProjectId",
+ "diagnoseStudioComponentBindings",
"findNodeById",
"findProjectSecretUsages",
"findRawSecretResponseKey",
+ "findStudioBindingOperationOption",
"generateStudioId",
"getInsertCatalogCategoryLabel",
"InsertCatalogComponentEntry",
@@ -2150,11 +2287,16 @@
"RAW_SECRET_RESPONSE_KEYS",
"RawSecretResponseKeyMatch",
"removeNodeFromTree",
+ "removeStudioEventBinding",
+ "removeStudioPropBinding",
"resolveDefaultInsertPlacement",
"resolveInsertCatalogEntries",
"resolveInsertPlacement",
+ "resolveStudioBindableEvents",
+ "resolveStudioBindableProps",
"resolveStudioInstancePropertyFields",
"resolveStudioInstancePropertyGroups",
+ "resolveStudioSchemaValueMeta",
"STUDIO_INSERT_RECIPES",
"STUDIO_PACKAGE_BOUNDARY",
"STUDIO_PACKAGE_NAME",
@@ -2169,6 +2311,13 @@
"StudioAuthoringComponentMeta",
"StudioAuthoringMetaRegistry",
"StudioAuthoringPropSchema",
+ "StudioBindableEventOption",
+ "StudioBindablePropOption",
+ "StudioBindingCompatibility",
+ "StudioBindingDiagnostic",
+ "StudioBindingInputFieldOption",
+ "StudioBindingOperationOption",
+ "StudioBindingResponsePathOption",
"StudioCommand",
"StudioComponentBlueprint",
"StudioComponentMeta",
@@ -2203,6 +2352,7 @@
"ThemeUpdates",
"TPL_SCREEN_EMPTY",
"updateNodeInTree",
+ "upsertStudioPropBinding",
"useStudio",
"useStudioAppBarAugmentation",
"validateInsertRecipe",
@@ -2597,6 +2747,7 @@
"exports": [
"createStudioAdminRoutePath",
"createStudioAdminRouteRenderState",
+ "createStudioBindingsRoutePath",
"createStudioPropertiesRoutePath",
"getStudioAdminRouteDefinition",
"isStudioAdminPath",
@@ -2606,6 +2757,7 @@
"resolveStudioAdminActiveRouteId",
"resolveStudioAdminRouteId",
"resolveStudioAdminRoutePath",
+ "resolveStudioBindingsNodeId",
"resolveStudioLastNonAdminLocation",
"resolveStudioNavigableLocation",
"resolveStudioPropertiesNodeId",
@@ -2693,6 +2845,7 @@
"src/studioAdminRouteModel.ts",
"src/ui/admin/pages/ApisAdminPage.tsx",
"src/ui/admin/pages/AuthAdminPage.tsx",
+ "src/ui/admin/pages/BindingsAdminPage.tsx",
"src/ui/admin/pages/OverviewAdminPage.tsx",
"src/ui/admin/pages/PropertiesAdminPage.tsx",
"src/ui/admin/pages/SecretsAdminPage.tsx",
@@ -2857,6 +3010,97 @@
],
"exports": ["AuthAdminPage", "AuthAdminPageProps"]
},
+ {
+ "path": "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "isEntrypoint": false,
+ "dependencies": [],
+ "exports": ["bindingAdminStyles"]
+ },
+ {
+ "path": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringModel.ts",
+ "src/ui/admin/pages/bindings/bindingAdminStyles.ts"
+ ],
+ "exports": ["BindingDiagnosticsCard"]
+ },
+ {
+ "path": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/bindingAuthoringModel.ts"],
+ "exports": [
+ "createStudioEventBinding",
+ "createStudioEventInputDrafts",
+ "createStudioOperationKey",
+ "createStudioPropBindingForSource",
+ "findStudioOperationByKey",
+ "formatStudioBindingLiteral",
+ "parseStudioBindingLiteral",
+ "STUDIO_BINDING_SOURCE_OPTIONS",
+ "StudioBindingSourceKind",
+ "StudioEventInputDraft",
+ "StudioEventInputSourceKind"
+ ]
+ },
+ {
+ "path": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringModel.ts",
+ "src/index.ts",
+ "src/ui/admin/adminPagePrimitives.tsx",
+ "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ ],
+ "exports": ["EventBindingComposer"]
+ },
+ {
+ "path": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringModel.ts",
+ "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ ],
+ "exports": ["EventBindingsCard"]
+ },
+ {
+ "path": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringModel.ts",
+ "src/ui/admin/adminPagePrimitives.tsx",
+ "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ ],
+ "exports": ["PropertyBindingEditor"]
+ },
+ {
+ "path": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringModel.ts",
+ "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ ],
+ "exports": ["PropertyBindingsCard"]
+ },
+ {
+ "path": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/bindingAuthoringModel.ts",
+ "src/core/StudioContext.ts",
+ "src/index.ts",
+ "src/manifestState.ts",
+ "src/ui/admin/adminPagePrimitives.tsx",
+ "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx",
+ "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
+ ],
+ "exports": ["BindingsAdminPage"]
+ },
{
"path": "src/ui/admin/pages/DataSourceCatalogCard.tsx",
"isEntrypoint": false,
@@ -3138,7 +3382,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 378,
+ "line": 384,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3156,7 +3400,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 284,
+ "line": 290,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3210,7 +3454,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 600,
+ "line": 606,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3233,6 +3477,94 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "appendStudioEventBinding",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingMutationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 34,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [
+ {
+ "label": "(registry: Readonly
>, node: UiNode, eventName: string, binding: EventBinding) => Readonly>",
+ "parameters": [
+ {
+ "name": "binding",
+ "type": "EventBinding",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "eventName",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "Readonly>",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "assessStudioBindingCompatibility",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingSchemaModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 43,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingCompatibility"],
+ "signatures": [
+ {
+ "label": "(expected: UiBindableValueMeta, actual: UiBindableValueMeta) => StudioBindingCompatibility",
+ "parameters": [
+ {
+ "name": "actual",
+ "type": "UiBindableValueMeta",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "expected",
+ "type": "UiBindableValueMeta",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "StudioBindingCompatibility",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "buildInsertCatalogEntries",
"description": null,
@@ -3242,7 +3574,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1312,
+ "line": 1318,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3274,7 +3606,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 759,
+ "line": 765,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3306,7 +3638,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 525,
+ "line": 531,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3335,6 +3667,76 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "collectStudioBindingOperationOptions",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingOperationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 16,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingOperationOption"],
+ "signatures": [
+ {
+ "label": "(dataSources: Readonly>) => readonly StudioBindingOperationOption[]",
+ "parameters": [
+ {
+ "name": "dataSources",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioBindingOperationOption[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "collectStudioResponsePaths",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingSchemaModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 33,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingResponsePathOption"],
+ "signatures": [
+ {
+ "label": "(schema: DataSchema | undefined, schemas: Readonly> | undefined) => readonly StudioBindingResponsePathOption[]",
+ "parameters": [
+ {
+ "name": "schema",
+ "type": "DataSchema | undefined",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "schemas",
+ "type": "Readonly> | undefined",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioBindingResponsePathOption[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "createNodeFromCatalogEntry",
"description": null,
@@ -3344,7 +3746,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1231,
+ "line": 1237,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3379,6 +3781,38 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "createStudioActionInputFields",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingOperationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 95,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingInputFieldOption"],
+ "signatures": [
+ {
+ "label": "(payloadSchema: Readonly> | undefined) => readonly StudioBindingInputFieldOption[]",
+ "parameters": [
+ {
+ "name": "payloadSchema",
+ "type": "Readonly> | undefined",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioBindingInputFieldOption[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "createStudioInstancePropertyPatch",
"description": null,
@@ -3455,6 +3889,38 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "diagnoseStudioComponentBindings",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingDiagnosticsModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 20,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingDiagnostic", "StudioBindingOperationOption"],
+ "signatures": [
+ {
+ "label": "(args: { readonly node: UiNode; readonly registry: ComponentDataBindingRegistry; readonly componentMeta: UiComponentMetaRegistry; readonly operations: readonly StudioBindingOperationOption[]; readonly actionTypes: readonly string[]; }) => readonly StudioBindingDiagnostic[]",
+ "parameters": [
+ {
+ "name": "args",
+ "type": "{ readonly node: UiNode; readonly registry: ComponentDataBindingRegistry; readonly componentMeta: UiComponentMetaRegistry; readonly operations: readonly StudioBindingOperationOption[]; readonly actionTypes: readonly string[]; }",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioBindingDiagnostic[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "findNodeById",
"description": null,
@@ -3464,7 +3930,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 542,
+ "line": 548,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3493,6 +3959,44 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "findStudioBindingOperationOption",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingOperationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 24,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingOperationOption"],
+ "signatures": [
+ {
+ "label": "(options: readonly StudioBindingOperationOption[], ref: BindingOperationRef) => StudioBindingOperationOption | undefined",
+ "parameters": [
+ {
+ "name": "options",
+ "type": "readonly StudioBindingOperationOption[]",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "ref",
+ "type": "BindingOperationRef",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "StudioBindingOperationOption | undefined",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "generateStudioId",
"description": null,
@@ -3502,7 +4006,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 518,
+ "line": 524,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3534,7 +4038,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1157,
+ "line": 1163,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3566,7 +4070,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 262,
+ "line": 268,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3659,7 +4163,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 244,
+ "line": 250,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3699,7 +4203,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 221,
+ "line": 227,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3717,7 +4221,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 272,
+ "line": 278,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3735,7 +4239,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 250,
+ "line": 256,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3822,7 +4326,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 218,
+ "line": 224,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3840,7 +4344,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 219,
+ "line": 225,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3858,7 +4362,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 267,
+ "line": 273,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3952,7 +4456,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 989,
+ "line": 995,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3984,7 +4488,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 932,
+ "line": 938,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4031,7 +4535,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 939,
+ "line": 945,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4064,7 +4568,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 229,
+ "line": 235,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4118,7 +4622,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 237,
+ "line": 243,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4165,7 +4669,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 224,
+ "line": 230,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4198,7 +4702,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 292,
+ "line": 298,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4245,7 +4749,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 633,
+ "line": 639,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -4289,7 +4793,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1057,
+ "line": 1063,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4321,7 +4825,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1016,
+ "line": 1022,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4368,7 +4872,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1023,
+ "line": 1029,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4401,7 +4905,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 180,
+ "line": 186,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4448,7 +4952,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 187,
+ "line": 193,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4466,7 +4970,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 199,
+ "line": 205,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4499,7 +5003,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 178,
+ "line": 184,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4517,7 +5021,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 211,
+ "line": 217,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4535,7 +5039,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 204,
+ "line": 210,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5011,7 +5515,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 582,
+ "line": 588,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -5040,6 +5544,100 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "removeStudioEventBinding",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingMutationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 50,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [
+ {
+ "label": "(registry: Readonly>, node: UiNode, eventName: string, bindingIndex: number) => Readonly>",
+ "parameters": [
+ {
+ "name": "bindingIndex",
+ "type": "number",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "eventName",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "Readonly>",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "removeStudioPropBinding",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingMutationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 22,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [
+ {
+ "label": "(registry: Readonly>, node: UiNode, propName: string) => Readonly>",
+ "parameters": [
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "propName",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "Readonly>",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "resolveDefaultInsertPlacement",
"description": null,
@@ -5049,7 +5647,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 887,
+ "line": 893,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5081,7 +5679,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1354,
+ "line": 1360,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5113,7 +5711,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 826,
+ "line": 832,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5140,6 +5738,82 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "resolveStudioBindableEvents",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingMetadataModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingMetadataModel.ts",
+ "line": 21,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindableEventOption"],
+ "signatures": [
+ {
+ "label": "(node: UiNode, registry: Readonly>) => readonly StudioBindableEventOption[]",
+ "parameters": [
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioBindableEventOption[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "resolveStudioBindableProps",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingMetadataModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingMetadataModel.ts",
+ "line": 8,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindablePropOption"],
+ "signatures": [
+ {
+ "label": "(node: UiNode, registry: Readonly>) => readonly StudioBindablePropOption[]",
+ "parameters": [
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioBindablePropOption[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "resolveStudioInstancePropertyFields",
"description": null,
@@ -5216,6 +5890,50 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "resolveStudioSchemaValueMeta",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingSchemaModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 14,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [
+ {
+ "label": "(schema: DataSchema | undefined, schemas: Readonly> | undefined, seen?: ReadonlySet) => UiBindableValueMeta",
+ "parameters": [
+ {
+ "name": "schema",
+ "type": "DataSchema | undefined",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "schemas",
+ "type": "Readonly> | undefined",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "seen",
+ "type": "ReadonlySet",
+ "required": false,
+ "description": null
+ }
+ ],
+ "returnType": "UiBindableValueMeta",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "STUDIO_INSERT_RECIPES",
"description": null,
@@ -5225,7 +5943,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1124,
+ "line": 1130,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -5268,7 +5986,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 59,
+ "line": 60,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -5286,7 +6004,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 51,
+ "line": 52,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -5304,7 +6022,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 87,
+ "line": 88,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -5322,7 +6040,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 276,
+ "line": 282,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5362,7 +6080,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 274,
+ "line": 280,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5380,7 +6098,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 282,
+ "line": 288,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5398,7 +6116,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 122,
+ "line": 126,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5416,7 +6134,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 145,
+ "line": 150,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5434,7 +6152,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 134,
+ "line": 139,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5555,6 +6273,292 @@
],
"structuredRows": []
},
+ {
+ "name": "StudioBindableEventOption",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 16,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "meta",
+ "kind": "property",
+ "type": "UiBindableEventMeta",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "name",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioBindablePropOption",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 10,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "meta",
+ "kind": "property",
+ "type": "UiBindablePropMeta",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "name",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioBindingCompatibility",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "unknown",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 8,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioBindingDiagnostic",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 43,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [
+ {
+ "name": "code",
+ "kind": "property",
+ "type": "\"incompatible-input\" | \"incompatible-response\" | \"missing-action\" | \"missing-binding-meta\" | \"missing-input\" | \"missing-operation\" | \"missing-response-path\" | \"unknown-event\" | \"unknown-prop\"",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "message",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "path",
+ "kind": "property",
+ "type": "string | undefined",
+ "required": false,
+ "description": null
+ },
+ {
+ "name": "severity",
+ "kind": "property",
+ "type": "\"warning\" | \"error\"",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioBindingInputFieldOption",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 22,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "name",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "required",
+ "kind": "property",
+ "type": "boolean",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "value",
+ "kind": "property",
+ "type": "UiBindableValueMeta",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioBindingOperationOption",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 35,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioBindingInputFieldOption", "StudioBindingResponsePathOption"],
+ "signatures": [],
+ "members": [
+ {
+ "name": "inputFields",
+ "kind": "property",
+ "type": "readonly StudioBindingInputFieldOption[]",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "operation",
+ "kind": "property",
+ "type": "BindingOperationRef",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "responsePaths",
+ "kind": "property",
+ "type": "readonly StudioBindingResponsePathOption[]",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "sourceLabel",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioBindingResponsePathOption",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/bindingAuthoringContracts.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingAuthoringContracts.ts",
+ "line": 29,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "path",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "value",
+ "kind": "property",
+ "type": "UiBindableValueMeta",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
{
"name": "StudioCommand",
"description": null,
@@ -5564,7 +6568,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 317,
+ "line": 323,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5582,7 +6586,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 301,
+ "line": 307,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5615,7 +6619,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 306,
+ "line": 312,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5662,7 +6666,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 313,
+ "line": 319,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5680,7 +6684,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 333,
+ "line": 339,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6083,7 +7087,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 326,
+ "line": 332,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6101,7 +7105,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 315,
+ "line": 321,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6270,7 +7274,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 117,
+ "line": 121,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6288,7 +7292,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 147,
+ "line": 153,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6306,7 +7310,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 119,
+ "line": 123,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6324,7 +7328,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 116,
+ "line": 120,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6342,7 +7346,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 114,
+ "line": 118,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6360,7 +7364,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 53,
+ "line": 54,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6400,7 +7404,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 121,
+ "line": 125,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6418,7 +7422,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 112,
+ "line": 116,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6525,7 +7529,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 110,
+ "line": 114,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6543,7 +7547,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 120,
+ "line": 124,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6561,7 +7565,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 115,
+ "line": 119,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6579,7 +7583,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 158,
+ "line": 164,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6633,7 +7637,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 113,
+ "line": 117,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6651,7 +7655,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 166,
+ "line": 172,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6899,7 +7903,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 153,
+ "line": 159,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6917,7 +7921,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 470,
+ "line": 476,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -6935,7 +7939,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 554,
+ "line": 560,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -6970,6 +7974,56 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "upsertStudioPropBinding",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/bindingMutationModel.ts",
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 9,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [
+ {
+ "label": "(registry: Readonly>, node: UiNode, propName: string, binding: PropBinding) => Readonly>",
+ "parameters": [
+ {
+ "name": "binding",
+ "type": "PropBinding",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "propName",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "Readonly>",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "validateInsertRecipe",
"description": null,
@@ -6979,7 +8033,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1174,
+ "line": 1180,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -7017,7 +8071,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 771,
+ "line": 777,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -7664,6 +8718,330 @@
"column": 1
}
},
+ {
+ "name": "diagnoseStudioComponentBindings",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 20,
+ "column": 1
+ }
+ },
+ {
+ "name": "diagnosePropBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 46,
+ "column": 1
+ }
+ },
+ {
+ "name": "diagnoseEventBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 86,
+ "column": 1
+ }
+ },
+ {
+ "name": "diagnoseEventInputs",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 112,
+ "column": 1
+ }
+ },
+ {
+ "name": "diagnoseInputCompatibility",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 135,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveEventSourceValue",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 160,
+ "column": 1
+ }
+ },
+ {
+ "name": "missingOperationDiagnostic",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 175,
+ "column": 1
+ }
+ },
+ {
+ "name": "toBindableType",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 185,
+ "column": 1
+ }
+ },
+ {
+ "name": "diagnostic",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingDiagnosticsModel.ts",
+ "line": 198,
+ "column": 1
+ }
+ },
+ {
+ "name": "createManifest",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingManifestPersistence.test.ts",
+ "line": 8,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveStudioBindableProps",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMetadataModel.ts",
+ "line": 8,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveStudioBindableEvents",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMetadataModel.ts",
+ "line": 21,
+ "column": 1
+ }
+ },
+ {
+ "name": "upsertStudioPropBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 9,
+ "column": 1
+ }
+ },
+ {
+ "name": "removeStudioPropBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 22,
+ "column": 1
+ }
+ },
+ {
+ "name": "appendStudioEventBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 34,
+ "column": 1
+ }
+ },
+ {
+ "name": "removeStudioEventBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 50,
+ "column": 1
+ }
+ },
+ {
+ "name": "writeBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 66,
+ "column": 1
+ }
+ },
+ {
+ "name": "isEmptyBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingMutationModel.ts",
+ "line": 82,
+ "column": 1
+ }
+ },
+ {
+ "name": "collectStudioBindingOperationOptions",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 16,
+ "column": 1
+ }
+ },
+ {
+ "name": "findStudioBindingOperationOption",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 24,
+ "column": 1
+ }
+ },
+ {
+ "name": "collectSourceOperations",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 36,
+ "column": 1
+ }
+ },
+ {
+ "name": "collectOperationInputFields",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 55,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveSlotSchema",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 83,
+ "column": 1
+ }
+ },
+ {
+ "name": "describeSource",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 90,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioActionInputFields",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 95,
+ "column": 1
+ }
+ },
+ {
+ "name": "toBindableType",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingOperationModel.ts",
+ "line": 113,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveStudioSchemaValueMeta",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 14,
+ "column": 1
+ }
+ },
+ {
+ "name": "collectStudioResponsePaths",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 33,
+ "column": 1
+ }
+ },
+ {
+ "name": "assessStudioBindingCompatibility",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 43,
+ "column": 1
+ }
+ },
+ {
+ "name": "collectObjectPaths",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 58,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveSchemaRef",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 78,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveSchemaFields",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 88,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveSchemaType",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 100,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveSingleSchemaType",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 118,
+ "column": 1
+ }
+ },
+ {
+ "name": "isObjectLike",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 123,
+ "column": 1
+ }
+ },
+ {
+ "name": "isImageAssetShape",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/bindingSchemaModel.ts",
+ "line": 127,
+ "column": 1
+ }
+ },
{
"name": "createStudioCanvasDragPayload",
"description": null,
@@ -13087,7 +14465,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 518,
+ "line": 524,
"column": 14
}
},
@@ -13096,7 +14474,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 525,
+ "line": 531,
"column": 14
}
},
@@ -13105,7 +14483,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 542,
+ "line": 548,
"column": 14
}
},
@@ -13114,7 +14492,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 554,
+ "line": 560,
"column": 14
}
},
@@ -13123,7 +14501,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 582,
+ "line": 588,
"column": 14
}
},
@@ -13132,7 +14510,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 600,
+ "line": 606,
"column": 14
}
},
@@ -13141,7 +14519,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 633,
+ "line": 639,
"column": 14
}
},
@@ -13150,7 +14528,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 669,
+ "line": 675,
"column": 1
}
},
@@ -13159,7 +14537,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 674,
+ "line": 680,
"column": 9
}
},
@@ -13168,7 +14546,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 693,
+ "line": 699,
"column": 1
}
},
@@ -13177,7 +14555,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 704,
+ "line": 710,
"column": 1
}
},
@@ -13186,7 +14564,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 759,
+ "line": 765,
"column": 1
}
},
@@ -13195,7 +14573,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 771,
+ "line": 777,
"column": 1
}
},
@@ -13204,7 +14582,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 826,
+ "line": 832,
"column": 1
}
},
@@ -13213,7 +14591,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 887,
+ "line": 893,
"column": 1
}
},
@@ -13222,7 +14600,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 944,
+ "line": 950,
"column": 1
}
},
@@ -13231,7 +14609,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 989,
+ "line": 995,
"column": 1
}
},
@@ -13240,7 +14618,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1028,
+ "line": 1034,
"column": 1
}
},
@@ -13249,7 +14627,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1057,
+ "line": 1063,
"column": 1
}
},
@@ -13258,7 +14636,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1157,
+ "line": 1163,
"column": 1
}
},
@@ -13267,7 +14645,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1161,
+ "line": 1167,
"column": 1
}
},
@@ -13276,7 +14654,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1166,
+ "line": 1172,
"column": 1
}
},
@@ -13285,7 +14663,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1174,
+ "line": 1180,
"column": 1
}
},
@@ -13294,7 +14672,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1178,
+ "line": 1184,
"column": 9
}
},
@@ -13303,7 +14681,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1211,
+ "line": 1217,
"column": 1
}
},
@@ -13312,7 +14690,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1216,
+ "line": 1222,
"column": 9
}
},
@@ -13321,7 +14699,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1231,
+ "line": 1237,
"column": 1
}
},
@@ -13330,7 +14708,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1251,
+ "line": 1257,
"column": 1
}
},
@@ -13339,7 +14717,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1274,
+ "line": 1280,
"column": 1
}
},
@@ -13348,7 +14726,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1312,
+ "line": 1318,
"column": 1
}
},
@@ -13357,7 +14735,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1338,
+ "line": 1344,
"column": 1
}
},
@@ -13366,7 +14744,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1354,
+ "line": 1360,
"column": 1
}
},
@@ -13375,7 +14753,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1403,
+ "line": 1409,
"column": 1
}
},
@@ -15778,7 +17156,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 131,
+ "line": 142,
"column": 1
}
},
@@ -15787,7 +17165,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 142,
+ "line": 153,
"column": 1
}
},
@@ -15796,7 +17174,25 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 154,
+ "line": 172,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveStudioBindingsNodeId",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioAdminRouteModel.ts",
+ "line": 187,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioBindingsRoutePath",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioAdminRouteModel.ts",
+ "line": 191,
"column": 1
}
},
@@ -15805,7 +17201,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 165,
+ "line": 195,
"column": 1
}
},
@@ -15814,7 +17210,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 182,
+ "line": 199,
"column": 1
}
},
@@ -15823,7 +17219,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 186,
+ "line": 203,
"column": 1
}
},
@@ -15832,7 +17228,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 197,
+ "line": 217,
"column": 1
}
},
@@ -15841,7 +17237,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 208,
+ "line": 228,
"column": 1
}
},
@@ -15850,7 +17246,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 212,
+ "line": 232,
"column": 1
}
},
@@ -15859,7 +17255,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 229,
+ "line": 249,
"column": 1
}
},
@@ -15868,7 +17264,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 247,
+ "line": 268,
"column": 1
}
},
@@ -15877,7 +17273,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 264,
+ "line": 285,
"column": 1
}
},
@@ -15886,7 +17282,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 268,
+ "line": 289,
"column": 1
}
},
@@ -15895,7 +17291,16 @@
"description": null,
"sourceLocation": {
"filePath": "src/studioAdminRouteModel.ts",
- "line": 278,
+ "line": 299,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveStudioContextNodeId",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioAdminRouteModel.ts",
+ "line": 307,
"column": 1
}
},
@@ -16066,7 +17471,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/AnkhAdminPage.tsx",
- "line": 67,
+ "line": 74,
"column": 1
}
},
@@ -16745,6 +18150,213 @@
"column": 1
}
},
+ {
+ "name": "BindingDiagnosticsCard",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx",
+ "line": 7,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioPropBindingForSource",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 29,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioEventBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 44,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioEventInputDrafts",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 60,
+ "column": 1
+ }
+ },
+ {
+ "name": "parseStudioBindingLiteral",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 77,
+ "column": 1
+ }
+ },
+ {
+ "name": "formatStudioBindingLiteral",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 90,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioOperationKey",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 94,
+ "column": 1
+ }
+ },
+ {
+ "name": "findStudioOperationByKey",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 99,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioEventInputMap",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 106,
+ "column": 1
+ }
+ },
+ {
+ "name": "createDefaultBindingValue",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 129,
+ "column": 1
+ }
+ },
+ {
+ "name": "parseStructuredValue",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 137,
+ "column": 1
+ }
+ },
+ {
+ "name": "isBindingValue",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "line": 146,
+ "column": 1
+ }
+ },
+ {
+ "name": "EventBindingComposer",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "line": 36,
+ "column": 1
+ }
+ },
+ {
+ "name": "add",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "line": 62,
+ "column": 9
+ }
+ },
+ {
+ "name": "EventInputDrafts",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "line": 118,
+ "column": 1
+ }
+ },
+ {
+ "name": "EventBindingsCard",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "line": 14,
+ "column": 1
+ }
+ },
+ {
+ "name": "EventPayloadSummary",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "line": 77,
+ "column": 1
+ }
+ },
+ {
+ "name": "describeEventBinding",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "line": 89,
+ "column": 1
+ }
+ },
+ {
+ "name": "describeBindingInput",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "line": 100,
+ "column": 1
+ }
+ },
+ {
+ "name": "PropertyBindingEditor",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "line": 22,
+ "column": 1
+ }
+ },
+ {
+ "name": "PropertyBindingSourceFields",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "line": 78,
+ "column": 1
+ }
+ },
+ {
+ "name": "PropertyBindingsCard",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "line": 15,
+ "column": 1
+ }
+ },
+ {
+ "name": "BindingsAdminPage",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "line": 19,
+ "column": 1
+ }
+ },
{
"name": "DataSourceCatalogCard",
"description": null,
@@ -17407,7 +19019,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/useStudioAppBarAugmentation.ts",
- "line": 21,
+ "line": 22,
"column": 1
}
},
@@ -17520,6 +19132,22 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "appendStudioEventBinding",
+ "sourcePath": "src/bindingMutationModel.ts",
+ "symbolName": "appendStudioEventBinding",
+ "description": null,
+ "isReadme": false
+ },
+ {
+ "kind": "export",
+ "name": "assessStudioBindingCompatibility",
+ "sourcePath": "src/bindingSchemaModel.ts",
+ "symbolName": "assessStudioBindingCompatibility",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "buildInsertCatalogEntries",
@@ -17544,6 +19172,22 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "collectStudioBindingOperationOptions",
+ "sourcePath": "src/bindingOperationModel.ts",
+ "symbolName": "collectStudioBindingOperationOptions",
+ "description": null,
+ "isReadme": false
+ },
+ {
+ "kind": "export",
+ "name": "collectStudioResponsePaths",
+ "sourcePath": "src/bindingSchemaModel.ts",
+ "symbolName": "collectStudioResponsePaths",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "createNodeFromCatalogEntry",
@@ -17552,6 +19196,14 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "createStudioActionInputFields",
+ "sourcePath": "src/bindingOperationModel.ts",
+ "symbolName": "createStudioActionInputFields",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "createStudioInstancePropertyPatch",
@@ -17568,6 +19220,14 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "diagnoseStudioComponentBindings",
+ "sourcePath": "src/bindingDiagnosticsModel.ts",
+ "symbolName": "diagnoseStudioComponentBindings",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "findNodeById",
@@ -17576,6 +19236,14 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "findStudioBindingOperationOption",
+ "sourcePath": "src/bindingOperationModel.ts",
+ "symbolName": "findStudioBindingOperationOption",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "generateStudioId",
@@ -17624,6 +19292,22 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "removeStudioEventBinding",
+ "sourcePath": "src/bindingMutationModel.ts",
+ "symbolName": "removeStudioEventBinding",
+ "description": null,
+ "isReadme": false
+ },
+ {
+ "kind": "export",
+ "name": "removeStudioPropBinding",
+ "sourcePath": "src/bindingMutationModel.ts",
+ "symbolName": "removeStudioPropBinding",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "resolveDefaultInsertPlacement",
@@ -17648,6 +19332,22 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "resolveStudioBindableEvents",
+ "sourcePath": "src/bindingMetadataModel.ts",
+ "symbolName": "resolveStudioBindableEvents",
+ "description": null,
+ "isReadme": false
+ },
+ {
+ "kind": "export",
+ "name": "resolveStudioBindableProps",
+ "sourcePath": "src/bindingMetadataModel.ts",
+ "symbolName": "resolveStudioBindableProps",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "resolveStudioInstancePropertyFields",
@@ -17664,6 +19364,14 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "resolveStudioSchemaValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts",
+ "symbolName": "resolveStudioSchemaValueMeta",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "updateNodeInTree",
@@ -17672,6 +19380,14 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "upsertStudioPropBinding",
+ "sourcePath": "src/bindingMutationModel.ts",
+ "symbolName": "upsertStudioPropBinding",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "validateInsertRecipe",
@@ -17709,6 +19425,96 @@
"toPath": "src/authSettings.ts",
"sourcePath": "src/authSettings.test.ts"
},
+ {
+ "fromPath": "src/bindingAuthoringModel.test.ts",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromPath": "src/bindingAuthoringModel.ts",
+ "toPath": "src/bindingAuthoringContracts.ts",
+ "sourcePath": "src/bindingAuthoringModel.ts"
+ },
+ {
+ "fromPath": "src/bindingAuthoringModel.ts",
+ "toPath": "src/bindingDiagnosticsModel.ts",
+ "sourcePath": "src/bindingAuthoringModel.ts"
+ },
+ {
+ "fromPath": "src/bindingAuthoringModel.ts",
+ "toPath": "src/bindingMetadataModel.ts",
+ "sourcePath": "src/bindingAuthoringModel.ts"
+ },
+ {
+ "fromPath": "src/bindingAuthoringModel.ts",
+ "toPath": "src/bindingMutationModel.ts",
+ "sourcePath": "src/bindingAuthoringModel.ts"
+ },
+ {
+ "fromPath": "src/bindingAuthoringModel.ts",
+ "toPath": "src/bindingOperationModel.ts",
+ "sourcePath": "src/bindingAuthoringModel.ts"
+ },
+ {
+ "fromPath": "src/bindingAuthoringModel.ts",
+ "toPath": "src/bindingSchemaModel.ts",
+ "sourcePath": "src/bindingAuthoringModel.ts"
+ },
+ {
+ "fromPath": "src/bindingDiagnosticsModel.ts",
+ "toPath": "src/bindingAuthoringContracts.ts",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromPath": "src/bindingDiagnosticsModel.ts",
+ "toPath": "src/bindingOperationModel.ts",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromPath": "src/bindingDiagnosticsModel.ts",
+ "toPath": "src/bindingSchemaModel.ts",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromPath": "src/bindingManifestPersistence.test.ts",
+ "toPath": "src/core/studioManifestDraftModel.ts",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromPath": "src/bindingManifestPersistence.test.ts",
+ "toPath": "src/index.ts",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromPath": "src/bindingManifestPersistence.test.ts",
+ "toPath": "src/manifestSync.ts",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromPath": "src/bindingMetadataModel.ts",
+ "toPath": "src/bindingAuthoringContracts.ts",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromPath": "src/bindingMutationAcceptance.test.ts",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/bindingMutationAcceptance.test.ts"
+ },
+ {
+ "fromPath": "src/bindingOperationModel.ts",
+ "toPath": "src/bindingAuthoringContracts.ts",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromPath": "src/bindingOperationModel.ts",
+ "toPath": "src/bindingSchemaModel.ts",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromPath": "src/bindingSchemaModel.ts",
+ "toPath": "src/bindingAuthoringContracts.ts",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
{
"fromPath": "src/canvasDragModel.public.test.ts",
"toPath": "src/canvasDragModel.ts",
@@ -17814,6 +19620,11 @@
"toPath": "src/authSettings.ts",
"sourcePath": "src/index.ts"
},
+ {
+ "fromPath": "src/index.ts",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/index.ts"
+ },
{
"fromPath": "src/index.ts",
"toPath": "src/projectAuthHealth.ts",
@@ -19704,6 +21515,11 @@
"toPath": "src/ui/admin/pages/AuthAdminPage.tsx",
"sourcePath": "src/ui/admin/AnkhAdminPage.tsx"
},
+ {
+ "fromPath": "src/ui/admin/AnkhAdminPage.tsx",
+ "toPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "sourcePath": "src/ui/admin/AnkhAdminPage.tsx"
+ },
{
"fromPath": "src/ui/admin/AnkhAdminPage.tsx",
"toPath": "src/ui/admin/pages/OverviewAdminPage.tsx",
@@ -20054,6 +21870,46 @@
"toPath": "src/ui/admin/pages/adminAuthSessionModel.ts",
"sourcePath": "src/ui/admin/pages/AuthAdminPage.tsx"
},
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/core/StudioContext.ts",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/index.ts",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/manifestState.ts",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/ui/admin/adminPagePrimitives.tsx",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toPath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
{
"fromPath": "src/ui/admin/pages/DataSourceCatalogCard.tsx",
"toPath": "src/ui/admin/pages/ExternalApiAdminPrimitives.tsx",
@@ -20388,6 +22244,96 @@
"fromPath": "src/host/manifestSystem/auth/shared/index.ts",
"toPath": "src/host/manifestSystem/auth/shared/global.auth.system.tpl.ts",
"sourcePath": "src/host/manifestSystem/auth/shared/index.ts"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toPath": "src/index.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toPath": "src/ui/admin/adminPagePrimitives.tsx",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toPath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toPath": "src/ui/admin/adminPagePrimitives.tsx",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "toPath": "src/bindingAuthoringModel.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "toPath": "src/ui/admin/pages/bindings/bindingAdminStyles.ts",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
+ },
+ {
+ "fromPath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "toPath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
}
],
"calls": [
@@ -20877,6 +22823,420 @@
"callExpression": "asRecord",
"sourcePath": "src/authSettings.ts"
},
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "resolveStudioBindableProps",
+ "callExpression": "resolveStudioBindableProps",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "resolveStudioBindableEvents",
+ "callExpression": "resolveStudioBindableEvents",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "upsertStudioPropBinding",
+ "callExpression": "upsertStudioPropBinding",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "appendStudioEventBinding",
+ "callExpression": "appendStudioEventBinding",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "removeStudioEventBinding",
+ "callExpression": "removeStudioEventBinding",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "removeStudioPropBinding",
+ "callExpression": "removeStudioPropBinding",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "collectStudioBindingOperationOptions",
+ "callExpression": "collectStudioBindingOperationOptions",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "assessStudioBindingCompatibility",
+ "callExpression": "assessStudioBindingCompatibility",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingAuthoringModel.test.ts",
+ "toSymbol": "diagnoseStudioComponentBindings",
+ "callExpression": "diagnoseStudioComponentBindings",
+ "sourcePath": "src/bindingAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "diagnoseStudioComponentBindings",
+ "toSymbol": "diagnostic",
+ "callExpression": "diagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingDiagnosticsModel.ts",
+ "toSymbol": "diagnosePropBinding",
+ "callExpression": "diagnosePropBinding",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingDiagnosticsModel.ts",
+ "toSymbol": "diagnoseEventBinding",
+ "callExpression": "diagnoseEventBinding",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnosePropBinding",
+ "toSymbol": "diagnostic",
+ "callExpression": "diagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnosePropBinding",
+ "toSymbol": "findStudioBindingOperationOption",
+ "callExpression": "findStudioBindingOperationOption",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnosePropBinding",
+ "toSymbol": "missingOperationDiagnostic",
+ "callExpression": "missingOperationDiagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnosePropBinding",
+ "toSymbol": "assessStudioBindingCompatibility",
+ "callExpression": "assessStudioBindingCompatibility",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseEventBinding",
+ "toSymbol": "diagnostic",
+ "callExpression": "diagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseEventBinding",
+ "toSymbol": "findStudioBindingOperationOption",
+ "callExpression": "findStudioBindingOperationOption",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseEventBinding",
+ "toSymbol": "missingOperationDiagnostic",
+ "callExpression": "missingOperationDiagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseEventBinding",
+ "toSymbol": "diagnoseEventInputs",
+ "callExpression": "diagnoseEventInputs",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingDiagnosticsModel.ts",
+ "toSymbol": "diagnostic",
+ "callExpression": "diagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingDiagnosticsModel.ts",
+ "toSymbol": "diagnoseInputCompatibility",
+ "callExpression": "diagnoseInputCompatibility",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseInputCompatibility",
+ "toSymbol": "resolveEventSourceValue",
+ "callExpression": "resolveEventSourceValue",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseInputCompatibility",
+ "toSymbol": "diagnostic",
+ "callExpression": "diagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseInputCompatibility",
+ "toSymbol": "assessStudioBindingCompatibility",
+ "callExpression": "assessStudioBindingCompatibility",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "resolveEventSourceValue",
+ "toSymbol": "toBindableType",
+ "callExpression": "toBindableType",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "missingOperationDiagnostic",
+ "toSymbol": "diagnostic",
+ "callExpression": "diagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingManifestPersistence.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingManifestPersistence.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingManifestPersistence.test.ts",
+ "toSymbol": "updateStudioManifestDraftDataBindings",
+ "callExpression": "updateStudioManifestDraftDataBindings",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingManifestPersistence.test.ts",
+ "toSymbol": "createManifest",
+ "callExpression": "createManifest",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingManifestPersistence.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingManifestPersistence.test.ts",
+ "toSymbol": "createStudioManifestSignature",
+ "callExpression": "createStudioManifestSignature",
+ "sourcePath": "src/bindingManifestPersistence.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingMutationAcceptance.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/bindingMutationAcceptance.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingMutationAcceptance.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/bindingMutationAcceptance.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingMutationAcceptance.test.ts",
+ "toSymbol": "upsertStudioPropBinding",
+ "callExpression": "upsertStudioPropBinding",
+ "sourcePath": "src/bindingMutationAcceptance.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingMutationAcceptance.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/bindingMutationAcceptance.test.ts"
+ },
+ {
+ "fromSymbol": "src/bindingMutationAcceptance.test.ts",
+ "toSymbol": "appendStudioEventBinding",
+ "callExpression": "appendStudioEventBinding",
+ "sourcePath": "src/bindingMutationAcceptance.test.ts"
+ },
+ {
+ "fromSymbol": "upsertStudioPropBinding",
+ "toSymbol": "writeBinding",
+ "callExpression": "writeBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioPropBinding",
+ "toSymbol": "writeBinding",
+ "callExpression": "writeBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "appendStudioEventBinding",
+ "toSymbol": "writeBinding",
+ "callExpression": "writeBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioEventBinding",
+ "toSymbol": "writeBinding",
+ "callExpression": "writeBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "writeBinding",
+ "toSymbol": "isEmptyBinding",
+ "callExpression": "isEmptyBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingOperationModel.ts",
+ "toSymbol": "collectSourceOperations",
+ "callExpression": "collectSourceOperations",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingOperationModel.ts",
+ "toSymbol": "describeSource",
+ "callExpression": "describeSource",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingOperationModel.ts",
+ "toSymbol": "collectOperationInputFields",
+ "callExpression": "collectOperationInputFields",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingOperationModel.ts",
+ "toSymbol": "collectStudioResponsePaths",
+ "callExpression": "collectStudioResponsePaths",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingOperationModel.ts",
+ "toSymbol": "resolveSlotSchema",
+ "callExpression": "resolveSlotSchema",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "collectOperationInputFields",
+ "toSymbol": "resolveStudioSchemaValueMeta",
+ "callExpression": "resolveStudioSchemaValueMeta",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "collectOperationInputFields",
+ "toSymbol": "resolveSlotSchema",
+ "callExpression": "resolveSlotSchema",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingOperationModel.ts",
+ "toSymbol": "toBindableType",
+ "callExpression": "toBindableType",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toSymbol": "resolveSchemaRef",
+ "callExpression": "resolveSchemaRef",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toSymbol": "resolveSchemaType",
+ "callExpression": "resolveSchemaType",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toSymbol": "resolveSchemaFields",
+ "callExpression": "resolveSchemaFields",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toSymbol": "resolveStudioSchemaValueMeta",
+ "callExpression": "resolveStudioSchemaValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioResponsePaths",
+ "toSymbol": "resolveStudioSchemaValueMeta",
+ "callExpression": "resolveStudioSchemaValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioResponsePaths",
+ "toSymbol": "collectObjectPaths",
+ "callExpression": "collectObjectPaths",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "assessStudioBindingCompatibility",
+ "toSymbol": "isObjectLike",
+ "callExpression": "isObjectLike",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "assessStudioBindingCompatibility",
+ "toSymbol": "isImageAssetShape",
+ "callExpression": "isImageAssetShape",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectObjectPaths",
+ "toSymbol": "resolveSchemaRef",
+ "callExpression": "resolveSchemaRef",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectObjectPaths",
+ "toSymbol": "resolveStudioSchemaValueMeta",
+ "callExpression": "resolveStudioSchemaValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectObjectPaths",
+ "toSymbol": "collectObjectPaths",
+ "callExpression": "collectObjectPaths",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveSchemaRef",
+ "toSymbol": "resolveSchemaRef",
+ "callExpression": "resolveSchemaRef",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "src/bindingSchemaModel.ts",
+ "toSymbol": "resolveStudioSchemaValueMeta",
+ "callExpression": "resolveStudioSchemaValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveSchemaType",
+ "toSymbol": "resolveSingleSchemaType",
+ "callExpression": "resolveSingleSchemaType",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "isImageAssetShape",
+ "toSymbol": "isObjectLike",
+ "callExpression": "isObjectLike",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
{
"fromSymbol": "src/canvasDragModel.public.test.ts",
"toSymbol": "describe",
@@ -25121,14 +27481,14 @@
},
{
"fromSymbol": "src/studioAdminRouteModel.test.ts",
- "toSymbol": "resolveStudioPropertiesNodeId",
- "callExpression": "resolveStudioPropertiesNodeId",
+ "toSymbol": "resolveStudioBindingsNodeId",
+ "callExpression": "resolveStudioBindingsNodeId",
"sourcePath": "src/studioAdminRouteModel.test.ts"
},
{
"fromSymbol": "src/studioAdminRouteModel.test.ts",
- "toSymbol": "createStudioPropertiesRoutePath",
- "callExpression": "createStudioPropertiesRoutePath",
+ "toSymbol": "createStudioBindingsRoutePath",
+ "callExpression": "createStudioBindingsRoutePath",
"sourcePath": "src/studioAdminRouteModel.test.ts"
},
{
@@ -25137,6 +27497,18 @@
"callExpression": "createStudioAdminRoutePath",
"sourcePath": "src/studioAdminRouteModel.test.ts"
},
+ {
+ "fromSymbol": "src/studioAdminRouteModel.test.ts",
+ "toSymbol": "resolveStudioPropertiesNodeId",
+ "callExpression": "resolveStudioPropertiesNodeId",
+ "sourcePath": "src/studioAdminRouteModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioAdminRouteModel.test.ts",
+ "toSymbol": "createStudioPropertiesRoutePath",
+ "callExpression": "createStudioPropertiesRoutePath",
+ "sourcePath": "src/studioAdminRouteModel.test.ts"
+ },
{
"fromSymbol": "src/studioAdminRouteModel.test.ts",
"toSymbol": "createStudioAdminRouteRenderState",
@@ -25173,6 +27545,12 @@
"callExpression": "resolveStudioLastNonAdminLocation",
"sourcePath": "src/studioAdminRouteModel.test.ts"
},
+ {
+ "fromSymbol": "resolveStudioAdminRouteId",
+ "toSymbol": "resolveStudioBindingsNodeId",
+ "callExpression": "resolveStudioBindingsNodeId",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
{
"fromSymbol": "resolveStudioAdminRouteId",
"toSymbol": "resolveStudioPropertiesNodeId",
@@ -25185,6 +27563,18 @@
"callExpression": "resolveStudioAdminRouteId",
"sourcePath": "src/studioAdminRouteModel.ts"
},
+ {
+ "fromSymbol": "resolveStudioAdminRoutePath",
+ "toSymbol": "resolveStudioBindingsNodeId",
+ "callExpression": "resolveStudioBindingsNodeId",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioAdminRoutePath",
+ "toSymbol": "createStudioBindingsRoutePath",
+ "callExpression": "createStudioBindingsRoutePath",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
{
"fromSymbol": "resolveStudioAdminRoutePath",
"toSymbol": "resolveStudioPropertiesNodeId",
@@ -25203,6 +27593,24 @@
"callExpression": "getStudioAdminRouteDefinition",
"sourcePath": "src/studioAdminRouteModel.ts"
},
+ {
+ "fromSymbol": "resolveStudioBindingsNodeId",
+ "toSymbol": "resolveStudioContextNodeId",
+ "callExpression": "resolveStudioContextNodeId",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioPropertiesNodeId",
+ "toSymbol": "resolveStudioContextNodeId",
+ "callExpression": "resolveStudioContextNodeId",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioAdminRoutePath",
+ "toSymbol": "createStudioBindingsRoutePath",
+ "callExpression": "createStudioBindingsRoutePath",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
{
"fromSymbol": "createStudioAdminRoutePath",
"toSymbol": "createStudioPropertiesRoutePath",
@@ -25239,6 +27647,12 @@
"callExpression": "resolveStudioAdminRoutePath",
"sourcePath": "src/studioAdminRouteModel.ts"
},
+ {
+ "fromSymbol": "createStudioAdminRouteRenderState",
+ "toSymbol": "resolveStudioBindingsNodeId",
+ "callExpression": "resolveStudioBindingsNodeId",
+ "sourcePath": "src/studioAdminRouteModel.ts"
+ },
{
"fromSymbol": "createStudioAdminRouteRenderState",
"toSymbol": "resolveStudioPropertiesNodeId",
@@ -31155,6 +33569,12 @@
"callExpression": "createStudioSelectionContext",
"sourcePath": "src/ui/useStudioAppBarAugmentation.ts"
},
+ {
+ "fromSymbol": "src/ui/useStudioAppBarAugmentation.ts",
+ "toSymbol": "createStudioBindingsRoutePath",
+ "callExpression": "createStudioBindingsRoutePath",
+ "sourcePath": "src/ui/useStudioAppBarAugmentation.ts"
+ },
{
"fromSymbol": "src/ui/useStudioAppBarAugmentation.ts",
"toSymbol": "createStudioPropertiesRoutePath",
@@ -36423,6 +38843,12 @@
"callExpression": "expect",
"sourcePath": "src/ui/admin/AnkhAdminPage.test.ts"
},
+ {
+ "fromSymbol": "bindings",
+ "toSymbol": "resolveStudioBindingsNodeId",
+ "callExpression": "resolveStudioBindingsNodeId",
+ "sourcePath": "src/ui/admin/AnkhAdminPage.tsx"
+ },
{
"fromSymbol": "properties",
"toSymbol": "resolveStudioPropertiesNodeId",
@@ -38547,6 +40973,48 @@
"callExpression": "useZoraTheme",
"sourcePath": "src/ui/admin/pages/AuthAdminPage.tsx"
},
+ {
+ "fromSymbol": "BindingsAdminPage",
+ "toSymbol": "useStudio",
+ "callExpression": "useStudio",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "BindingsAdminPage",
+ "toSymbol": "findScreenIdForNode",
+ "callExpression": "findScreenIdForNode",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "BindingsAdminPage",
+ "toSymbol": "findNodeInManifest",
+ "callExpression": "findNodeInManifest",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toSymbol": "setActiveScreenId",
+ "callExpression": "studio.setActiveScreenId",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/BindingsAdminPage.tsx",
+ "toSymbol": "selectNode",
+ "callExpression": "studio.selectNode",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "BindingsAdminPage",
+ "toSymbol": "collectStudioBindingOperationOptions",
+ "callExpression": "collectStudioBindingOperationOptions",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "BindingsAdminPage",
+ "toSymbol": "diagnoseStudioComponentBindings",
+ "callExpression": "diagnoseStudioComponentBindings",
+ "sourcePath": "src/ui/admin/pages/BindingsAdminPage.tsx"
+ },
{
"fromSymbol": "src/ui/admin/pages/DataSourceCatalogCard.tsx",
"toSymbol": "describeSourceKind",
@@ -39752,6 +42220,228 @@
"toSymbol": "escapeStringLiteral",
"callExpression": "escapeStringLiteral",
"sourcePath": "src/host/layout/templates/auth/screen.ts"
+ },
+ {
+ "fromSymbol": "createStudioPropBindingForSource",
+ "toSymbol": "createDefaultBindingValue",
+ "callExpression": "createDefaultBindingValue",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioEventBinding",
+ "toSymbol": "createStudioEventInputMap",
+ "callExpression": "createStudioEventInputMap",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromSymbol": "parseStudioBindingLiteral",
+ "toSymbol": "parseStructuredValue",
+ "callExpression": "parseStructuredValue",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "toSymbol": "createStudioOperationKey",
+ "callExpression": "createStudioOperationKey",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/bindingEditorModel.ts",
+ "toSymbol": "parseStudioBindingLiteral",
+ "callExpression": "parseStudioBindingLiteral",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromSymbol": "parseStructuredValue",
+ "toSymbol": "isBindingValue",
+ "callExpression": "isBindingValue",
+ "sourcePath": "src/ui/admin/pages/bindings/bindingEditorModel.ts"
+ },
+ {
+ "fromSymbol": "EventBindingComposer",
+ "toSymbol": "useState",
+ "callExpression": "useState",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "EventBindingComposer",
+ "toSymbol": "createStudioOperationKey",
+ "callExpression": "createStudioOperationKey",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "EventBindingComposer",
+ "toSymbol": "findStudioOperationByKey",
+ "callExpression": "findStudioOperationByKey",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "EventBindingComposer",
+ "toSymbol": "useMemo",
+ "callExpression": "useMemo",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toSymbol": "createStudioActionInputFields",
+ "callExpression": "createStudioActionInputFields",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "EventBindingComposer",
+ "toSymbol": "useEffect",
+ "callExpression": "useEffect",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toSymbol": "setDrafts",
+ "callExpression": "setDrafts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toSymbol": "createStudioEventInputDrafts",
+ "callExpression": "createStudioEventInputDrafts",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "add",
+ "toSymbol": "onAdd",
+ "callExpression": "onAdd",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "add",
+ "toSymbol": "createStudioEventBinding",
+ "callExpression": "createStudioEventBinding",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toSymbol": "createStudioOperationKey",
+ "callExpression": "createStudioOperationKey",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingComposer.tsx",
+ "toSymbol": "onChange",
+ "callExpression": "props.onChange",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingComposer.tsx"
+ },
+ {
+ "fromSymbol": "EventBindingsCard",
+ "toSymbol": "resolveStudioBindableEvents",
+ "callExpression": "resolveStudioBindableEvents",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toSymbol": "describeEventBinding",
+ "callExpression": "describeEventBinding",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toSymbol": "describeBindingInput",
+ "callExpression": "describeBindingInput",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toSymbol": "onChange",
+ "callExpression": "props.onChange",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toSymbol": "removeStudioEventBinding",
+ "callExpression": "removeStudioEventBinding",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/EventBindingsCard.tsx",
+ "toSymbol": "appendStudioEventBinding",
+ "callExpression": "appendStudioEventBinding",
+ "sourcePath": "src/ui/admin/pages/bindings/EventBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toSymbol": "createStudioOperationKey",
+ "callExpression": "createStudioOperationKey",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toSymbol": "onChange",
+ "callExpression": "onChange",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toSymbol": "createStudioPropBindingForSource",
+ "callExpression": "createStudioPropBindingForSource",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "PropertyBindingSourceFields",
+ "toSymbol": "formatStudioBindingLiteral",
+ "callExpression": "formatStudioBindingLiteral",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toSymbol": "parseStudioBindingLiteral",
+ "callExpression": "parseStudioBindingLiteral",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "PropertyBindingSourceFields",
+ "toSymbol": "createStudioOperationKey",
+ "callExpression": "createStudioOperationKey",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "PropertyBindingSourceFields",
+ "toSymbol": "findStudioOperationByKey",
+ "callExpression": "findStudioOperationByKey",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toSymbol": "assessStudioBindingCompatibility",
+ "callExpression": "assessStudioBindingCompatibility",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx",
+ "toSymbol": "findStudioOperationByKey",
+ "callExpression": "findStudioOperationByKey",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"
+ },
+ {
+ "fromSymbol": "PropertyBindingsCard",
+ "toSymbol": "resolveStudioBindableProps",
+ "callExpression": "resolveStudioBindableProps",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "toSymbol": "onChange",
+ "callExpression": "props.onChange",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "toSymbol": "upsertStudioPropBinding",
+ "callExpression": "upsertStudioPropBinding",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx",
+ "toSymbol": "removeStudioPropBinding",
+ "callExpression": "removeStudioPropBinding",
+ "sourcePath": "src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"
}
],
"typeReferences": [
@@ -40275,6 +42965,266 @@
"toType": "UiNode",
"sourcePath": "src/index.ts"
},
+ {
+ "fromSymbol": "StudioBindablePropOption",
+ "toType": "UiBindablePropMeta",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "StudioBindableEventOption",
+ "toType": "UiBindableEventMeta",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "StudioBindingInputFieldOption",
+ "toType": "UiBindableValueMeta",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "StudioBindingResponsePathOption",
+ "toType": "UiBindableValueMeta",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "StudioBindingOperationOption",
+ "toType": "BindingOperationRef",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "StudioBindingOperationOption",
+ "toType": "StudioBindingInputFieldOption",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "StudioBindingOperationOption",
+ "toType": "StudioBindingResponsePathOption",
+ "sourcePath": "src/bindingAuthoringContracts.ts"
+ },
+ {
+ "fromSymbol": "diagnoseStudioComponentBindings",
+ "toType": "ComponentDataBindingRegistry",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseStudioComponentBindings",
+ "toType": "StudioBindingDiagnostic",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseStudioComponentBindings",
+ "toType": "StudioBindingOperationOption",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseStudioComponentBindings",
+ "toType": "UiComponentMetaRegistry",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "diagnoseStudioComponentBindings",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingDiagnosticsModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableProps",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableProps",
+ "toType": "StudioBindablePropOption",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableProps",
+ "toType": "UiComponentMeta",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableProps",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableProps",
+ "toType": "Users",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableEvents",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableEvents",
+ "toType": "StudioBindableEventOption",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableEvents",
+ "toType": "UiComponentMeta",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableEvents",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioBindableEvents",
+ "toType": "Users",
+ "sourcePath": "src/bindingMetadataModel.ts"
+ },
+ {
+ "fromSymbol": "upsertStudioPropBinding",
+ "toType": "ComponentDataBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "upsertStudioPropBinding",
+ "toType": "PropBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "upsertStudioPropBinding",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "upsertStudioPropBinding",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioPropBinding",
+ "toType": "ComponentDataBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioPropBinding",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioPropBinding",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "appendStudioEventBinding",
+ "toType": "ComponentDataBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "appendStudioEventBinding",
+ "toType": "EventBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "appendStudioEventBinding",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "appendStudioEventBinding",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioEventBinding",
+ "toType": "ComponentDataBinding",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioEventBinding",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "removeStudioEventBinding",
+ "toType": "UiNode",
+ "sourcePath": "src/bindingMutationModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioBindingOperationOptions",
+ "toType": "DataSourceConfig",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioBindingOperationOptions",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioBindingOperationOptions",
+ "toType": "StudioBindingOperationOption",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "findStudioBindingOperationOption",
+ "toType": "BindingOperationRef",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "findStudioBindingOperationOption",
+ "toType": "StudioBindingOperationOption",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioActionInputFields",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioActionInputFields",
+ "toType": "StudioBindingInputFieldOption",
+ "sourcePath": "src/bindingOperationModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toType": "DataSchema",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toType": "ReadonlySet",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioSchemaValueMeta",
+ "toType": "UiBindableValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioResponsePaths",
+ "toType": "DataSchema",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioResponsePaths",
+ "toType": "Readonly",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "collectStudioResponsePaths",
+ "toType": "StudioBindingResponsePathOption",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "assessStudioBindingCompatibility",
+ "toType": "StudioBindingCompatibility",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
+ {
+ "fromSymbol": "assessStudioBindingCompatibility",
+ "toType": "UiBindableValueMeta",
+ "sourcePath": "src/bindingSchemaModel.ts"
+ },
{
"fromSymbol": "resolveStudioInstancePropertyFields",
"toType": "Readonly",
diff --git a/src/bindingAuthoringContracts.ts b/src/bindingAuthoringContracts.ts
new file mode 100644
index 00000000..bfdb4aca
--- /dev/null
+++ b/src/bindingAuthoringContracts.ts
@@ -0,0 +1,57 @@
+import type {
+ BindingOperationRef,
+ UiBindableEventMeta,
+ UiBindablePropMeta,
+ UiBindableValueMeta,
+} from '@ankhorage/contracts';
+
+export type StudioBindingCompatibility = 'compatible' | 'incompatible' | 'unknown';
+
+export interface StudioBindablePropOption {
+ readonly name: string;
+ readonly label: string;
+ readonly meta: UiBindablePropMeta;
+}
+
+export interface StudioBindableEventOption {
+ readonly name: string;
+ readonly label: string;
+ readonly meta: UiBindableEventMeta;
+}
+
+export interface StudioBindingInputFieldOption {
+ readonly name: string;
+ readonly label: string;
+ readonly value: UiBindableValueMeta;
+ readonly required: boolean;
+}
+
+export interface StudioBindingResponsePathOption {
+ readonly path: string;
+ readonly label: string;
+ readonly value: UiBindableValueMeta;
+}
+
+export interface StudioBindingOperationOption {
+ readonly operation: BindingOperationRef;
+ readonly label: string;
+ readonly sourceLabel: string;
+ readonly inputFields: readonly StudioBindingInputFieldOption[];
+ readonly responsePaths: readonly StudioBindingResponsePathOption[];
+}
+
+export interface StudioBindingDiagnostic {
+ readonly code:
+ | 'incompatible-input'
+ | 'incompatible-response'
+ | 'missing-action'
+ | 'missing-binding-meta'
+ | 'missing-input'
+ | 'missing-operation'
+ | 'missing-response-path'
+ | 'unknown-event'
+ | 'unknown-prop';
+ readonly message: string;
+ readonly severity: 'error' | 'warning';
+ readonly path?: string;
+}
diff --git a/src/bindingAuthoringModel.test.ts b/src/bindingAuthoringModel.test.ts
new file mode 100644
index 00000000..c15a0073
--- /dev/null
+++ b/src/bindingAuthoringModel.test.ts
@@ -0,0 +1,225 @@
+import type {
+ ComponentDataBindingRegistry,
+ DataSourceRegistry,
+ PropBinding,
+ UiComponentMetaRegistry,
+ UiNode,
+} from '@ankhorage/contracts';
+import { describe, expect, test } from 'bun:test';
+
+import {
+ appendStudioEventBinding,
+ assessStudioBindingCompatibility,
+ collectStudioBindingOperationOptions,
+ diagnoseStudioComponentBindings,
+ removeStudioEventBinding,
+ removeStudioPropBinding,
+ resolveStudioBindableEvents,
+ resolveStudioBindableProps,
+ upsertStudioPropBinding,
+} from './bindingAuthoringModel';
+
+const button: UiNode = { id: 'button-1', type: 'Button', props: { children: 'Save' } };
+const componentMeta: UiComponentMetaRegistry = {
+ Button: {
+ name: 'Button',
+ category: 'component',
+ directManifestNode: true,
+ allowedChildren: [],
+ bindings: {
+ props: {
+ children: {
+ label: 'Label',
+ value: { type: 'string' },
+ acceptsFallback: true,
+ acceptsTransforms: true,
+ },
+ disabled: {
+ label: 'Disabled',
+ value: { type: 'boolean' },
+ acceptsFallback: true,
+ acceptsTransforms: true,
+ },
+ },
+ events: {
+ press: {
+ label: 'Press',
+ payload: { eventType: 'button.press', fields: [] },
+ },
+ },
+ },
+ props: {
+ children: { type: 'string', category: 'Content' },
+ disabled: { type: 'boolean', category: 'State' },
+ },
+ },
+};
+
+const dataSources: DataSourceRegistry = {
+ external: {
+ id: 'external',
+ kind: 'api',
+ origin: 'external',
+ protocol: 'rest',
+ baseUrl: 'https://example.test',
+ endpoints: {
+ profile: {
+ id: 'profile',
+ kind: 'http',
+ operations: {
+ 'profile.read': {
+ id: 'profile.read',
+ protocol: 'http',
+ intent: 'read',
+ response: {
+ schema: {
+ type: 'object',
+ properties: { name: { type: 'string' }, age: { type: 'number' } },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ generated: {
+ id: 'generated',
+ kind: 'api',
+ origin: 'generated',
+ protocol: 'rest',
+ generatedApiId: 'generated',
+ adapter: { id: 'primary-db', kind: 'database' },
+ endpoints: {
+ items: {
+ id: 'items',
+ kind: 'database',
+ operations: {
+ 'items.create': {
+ id: 'items.create',
+ protocol: 'database',
+ intent: 'create',
+ request: {
+ schema: {
+ type: 'object',
+ required: ['name'],
+ properties: { name: { type: 'string' }, count: { type: 'integer' } },
+ },
+ },
+ response: {
+ schema: {
+ type: 'object',
+ properties: { id: { type: 'string' }, name: { type: 'string' } },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+};
+
+describe('binding authoring metadata', () => {
+ test('derives only explicitly bindable props and events from component metadata', () => {
+ expect(resolveStudioBindableProps(button, componentMeta).map((entry) => entry.name)).toEqual([
+ 'children',
+ 'disabled',
+ ]);
+ expect(resolveStudioBindableEvents(button, componentMeta).map((entry) => entry.name)).toEqual([
+ 'press',
+ ]);
+ });
+});
+
+describe('binding registry mutations', () => {
+ test('round-trips property and event bindings through the canonical registry', () => {
+ const prop: PropBinding = { source: { kind: 'state', path: 'draft.name' } };
+ const withProp = upsertStudioPropBinding({}, button, 'children', prop);
+ const withEvent = appendStudioEventBinding(withProp, button, 'press', {
+ target: { kind: 'action', type: 'navigate' },
+ input: { route: { kind: 'literal', value: '/done' } },
+ });
+ const serialized = JSON.parse(JSON.stringify(withEvent)) as ComponentDataBindingRegistry;
+
+ expect(serialized[button.id]?.props?.children).toEqual(prop);
+ expect(serialized[button.id]?.events?.press?.[0]?.target).toEqual({
+ kind: 'action',
+ type: 'navigate',
+ });
+ expect(
+ removeStudioEventBinding(
+ removeStudioPropBinding(serialized, button, 'children'),
+ button,
+ 'press',
+ 0,
+ ),
+ ).toEqual({});
+ });
+});
+
+describe('binding operations and schemas', () => {
+ test('enumerates external and generated operations through one canonical model', () => {
+ const options = collectStudioBindingOperationOptions(dataSources);
+ expect(options.map((option) => option.operation.operationId).sort()).toEqual([
+ 'items.create',
+ 'profile.read',
+ ]);
+ const generated = options.find((option) => option.operation.operationId === 'items.create');
+ const external = options.find((option) => option.operation.operationId === 'profile.read');
+
+ expect(generated?.inputFields).toMatchObject([
+ { name: 'name', required: true, value: { type: 'string' } },
+ { name: 'count', required: false, value: { type: 'number' } },
+ ]);
+ expect(external?.responsePaths.map((entry) => entry.path)).toEqual(['', 'name', 'age']);
+ });
+
+ test('reports meaningful schema compatibility', () => {
+ expect(assessStudioBindingCompatibility({ type: 'string' }, { type: 'string' })).toBe(
+ 'compatible',
+ );
+ expect(assessStudioBindingCompatibility({ type: 'number' }, { type: 'string' })).toBe(
+ 'incompatible',
+ );
+ expect(assessStudioBindingCompatibility({ type: 'record' }, { type: 'object' })).toBe(
+ 'compatible',
+ );
+ });
+});
+
+describe('binding diagnostics', () => {
+ test('diagnoses missing operations and incompatible response paths', () => {
+ const operations = collectStudioBindingOperationOptions(dataSources);
+ const missingRegistry = upsertStudioPropBinding({}, button, 'children', {
+ source: {
+ kind: 'operation',
+ operation: { dataSourceId: 'missing', endpointId: 'x', operationId: 'x.read' },
+ },
+ });
+ const incompatibleRegistry = upsertStudioPropBinding({}, button, 'children', {
+ source: {
+ kind: 'operation',
+ operation: { dataSourceId: 'external', endpointId: 'profile', operationId: 'profile.read' },
+ path: 'age',
+ },
+ });
+
+ expect(
+ diagnoseStudioComponentBindings({
+ node: button,
+ registry: missingRegistry,
+ componentMeta,
+ operations,
+ actionTypes: ['navigate'],
+ })[0]?.code,
+ ).toBe('missing-operation');
+ expect(
+ diagnoseStudioComponentBindings({
+ node: button,
+ registry: incompatibleRegistry,
+ componentMeta,
+ operations,
+ actionTypes: ['navigate'],
+ })[0]?.code,
+ ).toBe('incompatible-response');
+ });
+});
diff --git a/src/bindingAuthoringModel.ts b/src/bindingAuthoringModel.ts
new file mode 100644
index 00000000..bfb09093
--- /dev/null
+++ b/src/bindingAuthoringModel.ts
@@ -0,0 +1,6 @@
+export * from './bindingAuthoringContracts';
+export * from './bindingDiagnosticsModel';
+export * from './bindingMetadataModel';
+export * from './bindingMutationModel';
+export * from './bindingOperationModel';
+export * from './bindingSchemaModel';
diff --git a/src/bindingDiagnosticsModel.ts b/src/bindingDiagnosticsModel.ts
new file mode 100644
index 00000000..ee504670
--- /dev/null
+++ b/src/bindingDiagnosticsModel.ts
@@ -0,0 +1,204 @@
+import type {
+ BindingInputValue,
+ BindingOperationRef,
+ ComponentDataBindingRegistry,
+ EventBinding,
+ PropBinding,
+ UiBindableValueMeta,
+ UiComponentMetaRegistry,
+ UiNode,
+} from '@ankhorage/contracts';
+
+import type {
+ StudioBindingDiagnostic,
+ StudioBindingInputFieldOption,
+ StudioBindingOperationOption,
+} from './bindingAuthoringContracts';
+import { findStudioBindingOperationOption } from './bindingOperationModel';
+import { assessStudioBindingCompatibility } from './bindingSchemaModel';
+
+export function diagnoseStudioComponentBindings(args: {
+ readonly node: UiNode;
+ readonly registry: ComponentDataBindingRegistry;
+ readonly componentMeta: UiComponentMetaRegistry;
+ readonly operations: readonly StudioBindingOperationOption[];
+ readonly actionTypes: readonly string[];
+}): readonly StudioBindingDiagnostic[] {
+ const binding = args.registry[args.node.id];
+ if (!binding) return [];
+ const meta = args.componentMeta[args.node.type]?.bindings;
+ if (!meta) {
+ return [
+ diagnostic('missing-binding-meta', 'This component exposes no canonical binding metadata.'),
+ ];
+ }
+
+ return [
+ ...Object.entries(binding.props ?? {}).flatMap(([name, prop]) =>
+ diagnosePropBinding(name, prop, args),
+ ),
+ ...Object.entries(binding.events ?? {}).flatMap(([name, events]) =>
+ events.flatMap((event, index) => diagnoseEventBinding(name, index, event, args)),
+ ),
+ ];
+}
+
+function diagnosePropBinding(
+ name: string,
+ binding: PropBinding,
+ args: Parameters[0],
+): readonly StudioBindingDiagnostic[] {
+ const propMeta = args.componentMeta[args.node.type]?.bindings?.props?.[name];
+ if (!propMeta) {
+ return [diagnostic('unknown-prop', `Property '${name}' is not bindable.`, `props.${name}`)];
+ }
+ if (binding.source.kind !== 'operation') return [];
+
+ const operation = findStudioBindingOperationOption(args.operations, binding.source.operation);
+ if (!operation) {
+ return [missingOperationDiagnostic(binding.source.operation, `props.${name}`)];
+ }
+
+ const path = binding.source.path ?? '';
+ const response = operation.responsePaths.find((candidate) => candidate.path === path);
+ if (!response) {
+ return [
+ diagnostic(
+ 'missing-response-path',
+ `Response path '${path || ''}' is unavailable.`,
+ `props.${name}`,
+ ),
+ ];
+ }
+
+ const compatibility = assessStudioBindingCompatibility(propMeta.value, response.value);
+ return compatibility === 'incompatible'
+ ? [
+ diagnostic(
+ 'incompatible-response',
+ `Response '${response.label}' is incompatible with ${propMeta.value.type}.`,
+ `props.${name}`,
+ ),
+ ]
+ : [];
+}
+
+function diagnoseEventBinding(
+ eventName: string,
+ index: number,
+ binding: EventBinding,
+ args: Parameters[0],
+): readonly StudioBindingDiagnostic[] {
+ const eventMeta = args.componentMeta[args.node.type]?.bindings?.events?.[eventName];
+ const path = `events.${eventName}.${index}`;
+ if (!eventMeta) {
+ return [diagnostic('unknown-event', `Event '${eventName}' is not bindable.`, path)];
+ }
+
+ if (binding.target.kind === 'action') {
+ return args.actionTypes.includes(binding.target.type)
+ ? []
+ : [diagnostic('missing-action', `Action '${binding.target.type}' is unavailable.`, path)];
+ }
+
+ const operation = findStudioBindingOperationOption(args.operations, binding.target.operation);
+ if (!operation) {
+ return [missingOperationDiagnostic(binding.target.operation, path)];
+ }
+
+ return diagnoseEventInputs(binding, operation.inputFields, eventMeta.payload?.fields ?? [], path);
+}
+
+function diagnoseEventInputs(
+ binding: EventBinding,
+ fields: readonly StudioBindingInputFieldOption[],
+ eventFields: readonly { readonly path: string; readonly type: string }[],
+ path: string,
+): readonly StudioBindingDiagnostic[] {
+ return fields.flatMap((field) => {
+ const input = binding.input?.[field.name];
+ if (!input) {
+ return field.required
+ ? [
+ diagnostic(
+ 'missing-input',
+ `Required input '${field.name}' is not mapped.`,
+ `${path}.input.${field.name}`,
+ ),
+ ]
+ : [];
+ }
+ return diagnoseInputCompatibility(input, field, eventFields, `${path}.input.${field.name}`);
+ });
+}
+
+function diagnoseInputCompatibility(
+ input: BindingInputValue,
+ field: StudioBindingInputFieldOption,
+ eventFields: readonly { readonly path: string; readonly type: string }[],
+ path: string,
+): readonly StudioBindingDiagnostic[] {
+ if (input.kind !== 'source' || input.source.kind !== 'event') return [];
+ const eventValue = resolveEventSourceValue(input.source.path, eventFields);
+ if (!eventValue) {
+ return [
+ diagnostic('incompatible-input', `Event path '${input.source.path}' is unavailable.`, path),
+ ];
+ }
+ const compatibility = assessStudioBindingCompatibility(field.value, eventValue);
+ return compatibility === 'incompatible'
+ ? [
+ diagnostic(
+ 'incompatible-input',
+ `Event path '${input.source.path}' is incompatible with ${field.value.type}.`,
+ path,
+ ),
+ ]
+ : [];
+}
+
+function resolveEventSourceValue(
+ path: string,
+ eventFields: readonly { readonly path: string; readonly type: string }[],
+): UiBindableValueMeta | undefined {
+ const exact = eventFields.find((candidate) => candidate.path === path);
+ if (exact) return { type: toBindableType(exact.type) };
+
+ const parent = eventFields.find(
+ (candidate) =>
+ path.startsWith(`${candidate.path}.`) &&
+ (candidate.type === 'object' || candidate.type === 'record' || candidate.type === 'unknown'),
+ );
+ return parent ? { type: 'unknown' } : undefined;
+}
+
+function missingOperationDiagnostic(
+ operation: BindingOperationRef,
+ path: string,
+): StudioBindingDiagnostic {
+ const ref = [operation.dataSourceId, operation.endpointId, operation.operationId]
+ .filter((part): part is string => part !== undefined)
+ .join(' · ');
+ return diagnostic('missing-operation', `Operation '${ref}' is unavailable.`, path);
+}
+
+function toBindableType(type: string): UiBindableValueMeta['type'] {
+ if (
+ type === 'string' ||
+ type === 'number' ||
+ type === 'boolean' ||
+ type === 'object' ||
+ type === 'record'
+ ) {
+ return type;
+ }
+ return 'unknown';
+}
+
+function diagnostic(
+ code: StudioBindingDiagnostic['code'],
+ message: string,
+ path?: string,
+): StudioBindingDiagnostic {
+ return { code, message, severity: 'error', ...(path ? { path } : {}) };
+}
diff --git a/src/bindingManifestPersistence.test.ts b/src/bindingManifestPersistence.test.ts
new file mode 100644
index 00000000..47f70c2f
--- /dev/null
+++ b/src/bindingManifestPersistence.test.ts
@@ -0,0 +1,52 @@
+import type { ComponentDataBindingRegistry } from '@ankhorage/contracts';
+import { describe, expect, test } from 'bun:test';
+
+import { updateStudioManifestDraftDataBindings } from './core/studioManifestDraftModel';
+import type { StudioManifest } from './index';
+import { createStudioManifestSignature } from './manifestSync';
+
+function createManifest(): StudioManifest {
+ return {
+ metadata: {
+ name: 'Binding persistence test',
+ slug: 'binding-persistence-test',
+ version: '1.0.0',
+ category: 'developer_tools',
+ themeId: 'default',
+ },
+ navigator: { type: 'stack', routes: [] },
+ screens: {},
+ dataSources: {},
+ themes: [],
+ activeThemeId: 'default',
+ settings: { localization: { defaultLocale: 'en', locales: ['en'] } },
+ infra: { plugins: [] },
+ };
+}
+
+describe('binding manifest persistence', () => {
+ test('round-trips canonical data bindings through the manifest draft and signature', () => {
+ const registry: ComponentDataBindingRegistry = {
+ 'button-1': {
+ componentId: 'button-1',
+ componentType: 'Button',
+ props: {
+ children: { source: { kind: 'context', path: 'session.user.name' } },
+ },
+ events: {
+ press: [
+ {
+ target: { kind: 'action', type: 'navigate' },
+ input: { route: { kind: 'literal', value: '/done' } },
+ },
+ ],
+ },
+ },
+ };
+ const next = updateStudioManifestDraftDataBindings(createManifest(), registry);
+ const serialized = JSON.parse(JSON.stringify(next)) as StudioManifest;
+
+ expect(serialized.dataBindings).toEqual(registry);
+ expect(createStudioManifestSignature(serialized)).toBe(createStudioManifestSignature(next));
+ });
+});
diff --git a/src/bindingMetadataModel.ts b/src/bindingMetadataModel.ts
new file mode 100644
index 00000000..e6e9f8fd
--- /dev/null
+++ b/src/bindingMetadataModel.ts
@@ -0,0 +1,32 @@
+import type { UiComponentMetaRegistry, UiNode } from '@ankhorage/contracts';
+
+import type {
+ StudioBindableEventOption,
+ StudioBindablePropOption,
+} from './bindingAuthoringContracts';
+
+export function resolveStudioBindableProps(
+ node: UiNode,
+ registry: UiComponentMetaRegistry,
+): readonly StudioBindablePropOption[] {
+ const props = registry[node.type]?.bindings?.props ?? {};
+
+ return Object.entries(props).map(([name, meta]) => ({
+ name,
+ label: meta.label ?? name,
+ meta,
+ }));
+}
+
+export function resolveStudioBindableEvents(
+ node: UiNode,
+ registry: UiComponentMetaRegistry,
+): readonly StudioBindableEventOption[] {
+ const events = registry[node.type]?.bindings?.events ?? {};
+
+ return Object.entries(events).map(([name, meta]) => ({
+ name,
+ label: meta.label ?? name,
+ meta,
+ }));
+}
diff --git a/src/bindingMutationAcceptance.test.ts b/src/bindingMutationAcceptance.test.ts
new file mode 100644
index 00000000..40664f32
--- /dev/null
+++ b/src/bindingMutationAcceptance.test.ts
@@ -0,0 +1,53 @@
+import type { UiNode } from '@ankhorage/contracts';
+import { describe, expect, test } from 'bun:test';
+
+import { appendStudioEventBinding, upsertStudioPropBinding } from './bindingAuthoringModel';
+
+const button: UiNode = { id: 'button-1', type: 'Button' };
+
+describe('binding mutation acceptance', () => {
+ test('authors literal, state, context, and operation property sources', () => {
+ const literal = upsertStudioPropBinding({}, button, 'children', {
+ source: { kind: 'literal', value: 'Save' },
+ });
+ const state = upsertStudioPropBinding(literal, button, 'children', {
+ source: { kind: 'state', path: 'draft.label' },
+ });
+ const context = upsertStudioPropBinding(state, button, 'children', {
+ source: { kind: 'context', path: 'session.label' },
+ });
+ const operation = upsertStudioPropBinding(context, button, 'children', {
+ source: {
+ kind: 'operation',
+ operation: { dataSourceId: 'catalog', endpointId: 'items', operationId: 'items.read' },
+ path: 'title',
+ },
+ });
+
+ expect(literal[button.id]?.props?.children?.source.kind).toBe('literal');
+ expect(state[button.id]?.props?.children?.source.kind).toBe('state');
+ expect(context[button.id]?.props?.children?.source.kind).toBe('context');
+ expect(operation[button.id]?.props?.children?.source.kind).toBe('operation');
+ });
+
+ test('authors action and operation event targets', () => {
+ const withAction = appendStudioEventBinding({}, button, 'press', {
+ target: { kind: 'action', type: 'navigate' },
+ input: { route: { kind: 'literal', value: '/done' } },
+ });
+ const withOperation = appendStudioEventBinding(withAction, button, 'press', {
+ target: {
+ kind: 'operation',
+ operation: { dataSourceId: 'generated', endpointId: 'items', operationId: 'items.create' },
+ },
+ input: {
+ name: { kind: 'source', source: { kind: 'event', path: 'value' } },
+ },
+ });
+
+ expect(withOperation[button.id]?.events?.press?.map((binding) => binding.target.kind)).toEqual([
+ 'action',
+ 'operation',
+ ]);
+ });
+});
diff --git a/src/bindingMutationModel.ts b/src/bindingMutationModel.ts
new file mode 100644
index 00000000..487c6c8c
--- /dev/null
+++ b/src/bindingMutationModel.ts
@@ -0,0 +1,86 @@
+import type {
+ ComponentDataBinding,
+ ComponentDataBindingRegistry,
+ EventBinding,
+ PropBinding,
+ UiNode,
+} from '@ankhorage/contracts';
+
+export function upsertStudioPropBinding(
+ registry: ComponentDataBindingRegistry,
+ node: UiNode,
+ propName: string,
+ binding: PropBinding,
+): ComponentDataBindingRegistry {
+ const current = registry[node.id];
+ return writeBinding(registry, node, {
+ ...current,
+ props: { ...(current?.props ?? {}), [propName]: binding },
+ });
+}
+
+export function removeStudioPropBinding(
+ registry: ComponentDataBindingRegistry,
+ node: UiNode,
+ propName: string,
+): ComponentDataBindingRegistry {
+ const current = registry[node.id];
+ if (!current?.props?.[propName]) return registry;
+ const props = { ...current.props };
+ delete props[propName];
+ return writeBinding(registry, node, { ...current, props });
+}
+
+export function appendStudioEventBinding(
+ registry: ComponentDataBindingRegistry,
+ node: UiNode,
+ eventName: string,
+ binding: EventBinding,
+): ComponentDataBindingRegistry {
+ const current = registry[node.id];
+ return writeBinding(registry, node, {
+ ...current,
+ events: {
+ ...(current?.events ?? {}),
+ [eventName]: [...(current?.events?.[eventName] ?? []), binding],
+ },
+ });
+}
+
+export function removeStudioEventBinding(
+ registry: ComponentDataBindingRegistry,
+ node: UiNode,
+ eventName: string,
+ bindingIndex: number,
+): ComponentDataBindingRegistry {
+ const current = registry[node.id];
+ const bindings = current?.events?.[eventName];
+ if (!current || !bindings?.[bindingIndex]) return registry;
+ const events = { ...(current.events ?? {}) };
+ const next = bindings.filter((_, index) => index !== bindingIndex);
+ if (next.length > 0) events[eventName] = next;
+ else delete events[eventName];
+ return writeBinding(registry, node, { ...current, events });
+}
+
+function writeBinding(
+ registry: ComponentDataBindingRegistry,
+ node: UiNode,
+ value: Omit,
+): ComponentDataBindingRegistry {
+ const next = { ...registry };
+ const binding: ComponentDataBinding = {
+ ...value,
+ componentId: node.id,
+ componentType: node.type,
+ };
+ if (isEmptyBinding(binding)) delete next[node.id];
+ else next[node.id] = binding;
+ return next;
+}
+
+function isEmptyBinding(binding: ComponentDataBinding): boolean {
+ return (
+ Object.keys(binding.props ?? {}).length === 0 && Object.keys(binding.events ?? {}).length === 0
+ );
+}
diff --git a/src/bindingOperationModel.ts b/src/bindingOperationModel.ts
new file mode 100644
index 00000000..b88ffa44
--- /dev/null
+++ b/src/bindingOperationModel.ts
@@ -0,0 +1,117 @@
+import type {
+ BindingOperationRef,
+ DataOperationConfig,
+ DataSchema,
+ DataSourceConfig,
+ DataSourceRegistry,
+ UiBindableValueMeta,
+} from '@ankhorage/contracts';
+
+import type {
+ StudioBindingInputFieldOption,
+ StudioBindingOperationOption,
+} from './bindingAuthoringContracts';
+import { collectStudioResponsePaths, resolveStudioSchemaValueMeta } from './bindingSchemaModel';
+
+export function collectStudioBindingOperationOptions(
+ dataSources: DataSourceRegistry,
+): readonly StudioBindingOperationOption[] {
+ return Object.values(dataSources)
+ .flatMap((source) => collectSourceOperations(source))
+ .sort((left, right) => left.label.localeCompare(right.label));
+}
+
+export function findStudioBindingOperationOption(
+ options: readonly StudioBindingOperationOption[],
+ ref: BindingOperationRef,
+): StudioBindingOperationOption | undefined {
+ return options.find(
+ (option) =>
+ option.operation.dataSourceId === ref.dataSourceId &&
+ option.operation.operationId === ref.operationId &&
+ option.operation.endpointId === ref.endpointId,
+ );
+}
+
+function collectSourceOperations(source: DataSourceConfig): StudioBindingOperationOption[] {
+ return Object.values(source.endpoints).flatMap((endpoint) =>
+ Object.values(endpoint.operations).map((operation) => ({
+ operation: {
+ dataSourceId: source.id,
+ endpointId: endpoint.id,
+ operationId: operation.id,
+ },
+ label: `${source.name ?? source.id} · ${operation.name ?? operation.id}`,
+ sourceLabel: describeSource(source),
+ inputFields: collectOperationInputFields(source, operation),
+ responsePaths: collectStudioResponsePaths(
+ resolveSlotSchema(source, operation.response),
+ source.schemas,
+ ),
+ })),
+ );
+}
+
+function collectOperationInputFields(
+ source: DataSourceConfig,
+ operation: DataOperationConfig,
+): readonly StudioBindingInputFieldOption[] {
+ const fields = new Map();
+ for (const parameter of operation.request?.parameters ?? []) {
+ fields.set(parameter.name, {
+ name: parameter.name,
+ label: parameter.description ?? parameter.name,
+ value: resolveStudioSchemaValueMeta(resolveSlotSchema(source, parameter), source.schemas),
+ required: parameter.required ?? false,
+ });
+ }
+
+ const requestSchema = resolveSlotSchema(source, operation.request);
+ for (const [name, schema] of Object.entries(requestSchema?.properties ?? {})) {
+ if (fields.has(name)) continue;
+ fields.set(name, {
+ name,
+ label: schema.title ?? name,
+ value: resolveStudioSchemaValueMeta(schema, source.schemas),
+ required: requestSchema?.required?.includes(name) ?? false,
+ });
+ }
+
+ return [...fields.values()];
+}
+
+function resolveSlotSchema(
+ source: DataSourceConfig,
+ slot: { readonly schema?: DataSchema; readonly schemaRef?: { readonly id: string } } | undefined,
+): DataSchema | undefined {
+ return slot?.schema ?? (slot?.schemaRef ? source.schemas?.[slot.schemaRef.id] : undefined);
+}
+
+function describeSource(source: DataSourceConfig): string {
+ if (source.kind === 'database') return `${source.id} · database`;
+ return `${source.id} · ${source.origin} · ${source.protocol}`;
+}
+
+export function createStudioActionInputFields(
+ payloadSchema:
+ | Readonly<
+ Record<
+ string,
+ { readonly label: string; readonly type: string; readonly required?: boolean }
+ >
+ >
+ | undefined,
+): readonly StudioBindingInputFieldOption[] {
+ return Object.entries(payloadSchema ?? {}).map(([name, field]) => ({
+ name,
+ label: field.label,
+ value: { type: toBindableType(field.type) },
+ required: field.required ?? false,
+ }));
+}
+
+function toBindableType(type: string): UiBindableValueMeta['type'] {
+ if (type === 'string' || type === 'number' || type === 'boolean' || type === 'object')
+ return type;
+ return 'unknown';
+}
diff --git a/src/bindingSchemaModel.ts b/src/bindingSchemaModel.ts
new file mode 100644
index 00000000..22fb96d0
--- /dev/null
+++ b/src/bindingSchemaModel.ts
@@ -0,0 +1,132 @@
+import type {
+ DataSchema,
+ DataSchemaPrimitiveType,
+ DataSchemaRegistry,
+ UiBindableValueFieldMeta,
+ UiBindableValueMeta,
+} from '@ankhorage/contracts';
+
+import type {
+ StudioBindingCompatibility,
+ StudioBindingResponsePathOption,
+} from './bindingAuthoringContracts';
+
+export function resolveStudioSchemaValueMeta(
+ schema: DataSchema | undefined,
+ schemas: DataSchemaRegistry | undefined,
+ seen: ReadonlySet = new Set(),
+): UiBindableValueMeta {
+ const resolved = resolveSchemaRef(schema, schemas, seen);
+ if (!resolved) return { type: 'unknown' };
+ const type = resolveSchemaType(resolved);
+ const fields = resolveSchemaFields(resolved, schemas, seen);
+ const itemType =
+ type === 'array' ? resolveStudioSchemaValueMeta(resolved.items, schemas, seen).type : undefined;
+
+ return {
+ type,
+ ...(fields.length > 0 ? { fields } : {}),
+ ...(itemType ? { itemType } : {}),
+ };
+}
+
+export function collectStudioResponsePaths(
+ schema: DataSchema | undefined,
+ schemas: DataSchemaRegistry | undefined,
+): readonly StudioBindingResponsePathOption[] {
+ const root = resolveStudioSchemaValueMeta(schema, schemas);
+ const paths: StudioBindingResponsePathOption[] = [{ path: '', label: 'Response', value: root }];
+ collectObjectPaths(schema, schemas, '', paths, new Set());
+ return paths;
+}
+
+export function assessStudioBindingCompatibility(
+ expected: UiBindableValueMeta,
+ actual: UiBindableValueMeta,
+): StudioBindingCompatibility {
+ if (expected.type === 'unknown' || actual.type === 'unknown') return 'unknown';
+ if (expected.type === actual.type) {
+ if (expected.type !== 'array') return 'compatible';
+ if (!expected.itemType || !actual.itemType) return 'unknown';
+ return expected.itemType === actual.itemType ? 'compatible' : 'incompatible';
+ }
+ if (isObjectLike(expected.type) && isObjectLike(actual.type)) return 'compatible';
+ if (expected.type === 'imageAsset' && isImageAssetShape(actual)) return 'compatible';
+ return 'incompatible';
+}
+
+function collectObjectPaths(
+ schema: DataSchema | undefined,
+ schemas: DataSchemaRegistry | undefined,
+ prefix: string,
+ paths: StudioBindingResponsePathOption[],
+ seen: Set,
+): void {
+ const resolved = resolveSchemaRef(schema, schemas, seen);
+ if (!resolved?.properties) return;
+ for (const [name, property] of Object.entries(resolved.properties)) {
+ const path = prefix ? `${prefix}.${name}` : name;
+ paths.push({
+ path,
+ label: path,
+ value: resolveStudioSchemaValueMeta(property, schemas, seen),
+ });
+ collectObjectPaths(property, schemas, path, paths, new Set(seen));
+ }
+}
+
+function resolveSchemaRef(
+ schema: DataSchema | undefined,
+ schemas: DataSchemaRegistry | undefined,
+ seen: ReadonlySet,
+): DataSchema | undefined {
+ const refId = schema?.ref?.id;
+ if (!refId || !schemas?.[refId] || seen.has(refId)) return schema;
+ return resolveSchemaRef(schemas[refId], schemas, new Set([...seen, refId]));
+}
+
+function resolveSchemaFields(
+ schema: DataSchema,
+ schemas: DataSchemaRegistry | undefined,
+ seen: ReadonlySet,
+): readonly UiBindableValueFieldMeta[] {
+ return Object.entries(schema.properties ?? {}).map(([path, property]) => ({
+ path,
+ type: resolveStudioSchemaValueMeta(property, schemas, seen).type,
+ required: schema.required?.includes(path) ?? false,
+ }));
+}
+
+function resolveSchemaType(schema: DataSchema): UiBindableValueMeta['type'] {
+ if (schema.format === 'date' || schema.format === 'date-time') return 'date';
+ const rawType = resolveSingleSchemaType(schema.type);
+ if (rawType === 'integer') return 'number';
+ if (rawType === 'object') return schema.additionalProperties ? 'record' : 'object';
+ if (
+ rawType === 'array' ||
+ rawType === 'boolean' ||
+ rawType === 'number' ||
+ rawType === 'string'
+ ) {
+ return rawType;
+ }
+ if (!rawType && schema.properties) return 'object';
+ if (!rawType && schema.items) return 'array';
+ return 'unknown';
+}
+
+function resolveSingleSchemaType(type: DataSchema['type']): DataSchemaPrimitiveType | undefined {
+ if (typeof type === 'string') return type;
+ return type?.length === 1 ? type[0] : undefined;
+}
+
+function isObjectLike(type: UiBindableValueMeta['type']): boolean {
+ return type === 'object' || type === 'record';
+}
+
+function isImageAssetShape(value: UiBindableValueMeta): boolean {
+ return (
+ isObjectLike(value.type) &&
+ value.fields?.some((field) => field.path === 'uri' && field.type === 'string') === true
+ );
+}
diff --git a/src/index.ts b/src/index.ts
index 9b3e22aa..eabef7a8 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,6 +15,7 @@ import type {
import type { StudioAuthSettings, StudioAuthSettingsMutation } from './authSettings';
+export * from './bindingAuthoringModel';
export type {
ProjectAuthDiagnostic,
ProjectAuthDiagnosticSeverity,
@@ -97,6 +98,9 @@ export const STUDIO_PUBLIC_CONTRACTS = [
'StudioInstancePropertyField',
'resolveStudioInstancePropertyGroups',
'createStudioInstancePropertyPatch',
+ 'resolveStudioBindableProps',
+ 'resolveStudioBindableEvents',
+ 'collectStudioBindingOperationOptions',
'ProjectAuthHealth',
'ProjectSecretUsageSummary',
'StudioAdminRouteId',
@@ -130,6 +134,7 @@ export type StudioAdminRouteId =
| 'auth-profile'
| 'secrets'
| 'theme'
+ | 'bindings'
| 'properties';
export type StudioAdminStaticRoutePath =
| '/ankh'
@@ -142,7 +147,8 @@ export type StudioAdminStaticRoutePath =
| '/ankh/auth/profile'
| '/ankh/secrets'
| '/ankh/theme';
-export type StudioAdminRoutePath = StudioAdminStaticRoutePath | `/ankh/properties/${string}`;
+export type StudioAdminRoutePath =
+ StudioAdminStaticRoutePath | `/ankh/bindings/${string}` | `/ankh/properties/${string}`;
export type StudioManifest = AppManifest & {
infra: AppManifest['infra'] & {
diff --git a/src/studioAdminRouteModel.test.ts b/src/studioAdminRouteModel.test.ts
index aeeac878..a38d1fde 100644
--- a/src/studioAdminRouteModel.test.ts
+++ b/src/studioAdminRouteModel.test.ts
@@ -3,12 +3,14 @@ import { describe, expect, test } from 'bun:test';
import {
createStudioAdminRoutePath,
createStudioAdminRouteRenderState,
+ createStudioBindingsRoutePath,
createStudioPropertiesRoutePath,
isStudioAdminRouteActive,
isStudioAdminRouteAvailable,
openStudioAdminRoute,
resolveStudioAdminRouteId,
resolveStudioAdminRoutePath,
+ resolveStudioBindingsNodeId,
resolveStudioLastNonAdminLocation,
resolveStudioNavigableLocation,
resolveStudioPropertiesNodeId,
@@ -28,6 +30,7 @@ describe('studioAdminRouteModel', () => {
'auth-profile',
'secrets',
'theme',
+ 'bindings',
'properties',
]);
});
@@ -43,12 +46,23 @@ describe('studioAdminRouteModel', () => {
expect(resolveStudioAdminRouteId('/ankh/auth/profile')).toBe('auth-profile');
expect(resolveStudioAdminRouteId('/ankh/secrets')).toBe('secrets');
expect(resolveStudioAdminRouteId('/ankh/theme')).toBe('theme');
+ expect(resolveStudioAdminRouteId('/ankh/bindings/node-1')).toBe('bindings');
expect(resolveStudioAdminRouteId('/ankh/properties/node-1')).toBe('properties');
+ expect(resolveStudioAdminRoutePath('/ankh/bindings/node-1')).toBe('/ankh/bindings/node-1');
expect(resolveStudioAdminRoutePath('/ankh/properties/node-1')).toBe('/ankh/properties/node-1');
expect(resolveStudioAdminRouteId('/app')).toBeNull();
});
- test('resolves properties node ids and creates properties paths', () => {
+ test('resolves contextual node ids and creates contextual paths', () => {
+ expect(resolveStudioBindingsNodeId('/ankh/bindings/node-1')).toBe('node-1');
+ expect(resolveStudioBindingsNodeId('/ankh/bindings/node%201')).toBe('node 1');
+ expect(resolveStudioBindingsNodeId('/ankh/apis')).toBeNull();
+ expect(createStudioBindingsRoutePath('node 1')).toBe('/ankh/bindings/node%201');
+ expect(createStudioAdminRoutePath({ routeId: 'bindings', selectedNodeId: 'node 1' })).toBe(
+ '/ankh/bindings/node%201',
+ );
+ expect(createStudioAdminRoutePath({ routeId: 'bindings', selectedNodeId: null })).toBeNull();
+
expect(resolveStudioPropertiesNodeId('/ankh/properties/node-1')).toBe('node-1');
expect(resolveStudioPropertiesNodeId('/ankh/properties/node%201')).toBe('node 1');
expect(resolveStudioPropertiesNodeId('/ankh/apis')).toBeNull();
@@ -69,10 +83,17 @@ describe('studioAdminRouteModel', () => {
routeAdminId: 'auth-providers',
resolvedAdminRouteId: 'auth-providers',
routeAdminPath: '/ankh/auth/providers',
+ bindingsNodeId: null,
propertiesNodeId: null,
shouldRenderAppContent: false,
shouldRenderAdminShell: true,
});
+ expect(
+ createStudioAdminRouteRenderState({
+ pathname: '/ankh/bindings/button-1',
+ activeAdminRouteId: 'overview',
+ }).bindingsNodeId,
+ ).toBe('button-1');
});
test('tracks hierarchy and contextual availability', () => {
@@ -88,6 +109,8 @@ describe('studioAdminRouteModel', () => {
candidateRouteId: 'apis',
}),
).toBe(false);
+ expect(isStudioAdminRouteAvailable('bindings', { selectedNodeId: null })).toBe(false);
+ expect(isStudioAdminRouteAvailable('bindings', { selectedNodeId: 'node-1' })).toBe(true);
expect(isStudioAdminRouteAvailable('properties', { selectedNodeId: null })).toBe(false);
expect(isStudioAdminRouteAvailable('properties', { selectedNodeId: 'node-1' })).toBe(true);
});
@@ -105,7 +128,7 @@ describe('studioAdminRouteModel', () => {
expect(
openStudioAdminRoute({
- next: 'properties',
+ next: 'bindings',
selectedNodeId: null,
setActivePanelId: (panelId) => panelIds.push(panelId),
pushRoute: (routePath) => routes.push(routePath),
diff --git a/src/studioAdminRouteModel.ts b/src/studioAdminRouteModel.ts
index 36e9d92a..f7999eed 100644
--- a/src/studioAdminRouteModel.ts
+++ b/src/studioAdminRouteModel.ts
@@ -7,7 +7,7 @@ import type {
export interface StudioAdminRouteDefinition {
readonly id: StudioAdminRouteId;
- readonly path: StudioAdminStaticRoutePath | '/ankh/properties/:nodeId';
+ readonly path: StudioAdminStaticRoutePath | '/ankh/bindings/:nodeId' | '/ankh/properties/:nodeId';
readonly label: string;
readonly icon: string;
readonly order: number;
@@ -20,6 +20,7 @@ export interface StudioAdminRouteRenderState {
routeAdminId: StudioAdminRouteId | null;
resolvedAdminRouteId: StudioAdminRouteId;
routeAdminPath: StudioAdminRoutePath | null;
+ bindingsNodeId: string | null;
propertiesNodeId: string | null;
shouldRenderAppContent: boolean;
shouldRenderAdminShell: boolean;
@@ -115,17 +116,27 @@ export const STUDIO_ADMIN_ROUTE_REGISTRY: readonly StudioAdminRouteDefinition[]
order: 40,
description: 'Active theme editing.',
},
+ {
+ id: 'bindings',
+ path: '/ankh/bindings/:nodeId',
+ label: 'Bindings',
+ icon: 'git-branch-outline',
+ order: 50,
+ contextual: true,
+ description: 'Selected node property/data and event/action bindings.',
+ },
{
id: 'properties',
path: '/ankh/properties/:nodeId',
label: 'Properties',
icon: 'options-outline',
- order: 50,
+ order: 51,
contextual: true,
description: 'Selected node properties.',
},
];
+const BINDINGS_ROUTE_PREFIX = '/ankh/bindings/';
const PROPERTIES_ROUTE_PREFIX = '/ankh/properties/';
export function getStudioAdminRouteDefinition(
@@ -140,12 +151,19 @@ export function getStudioAdminRouteDefinition(
}
export function resolveStudioAdminRouteId(pathname: string): StudioAdminRouteId | null {
+ if (pathname.startsWith(BINDINGS_ROUTE_PREFIX)) {
+ return resolveStudioBindingsNodeId(pathname) ? 'bindings' : null;
+ }
+
if (pathname.startsWith(PROPERTIES_ROUTE_PREFIX)) {
return resolveStudioPropertiesNodeId(pathname) ? 'properties' : null;
}
const route = STUDIO_ADMIN_ROUTE_REGISTRY.find(
- (candidate) => candidate.path !== '/ankh/properties/:nodeId' && candidate.path === pathname,
+ (candidate) =>
+ candidate.path !== '/ankh/bindings/:nodeId' &&
+ candidate.path !== '/ankh/properties/:nodeId' &&
+ candidate.path === pathname,
);
return route?.id ?? null;
@@ -154,6 +172,10 @@ export function resolveStudioAdminRouteId(pathname: string): StudioAdminRouteId
export function resolveStudioAdminRoutePath(pathname: string): StudioAdminRoutePath | null {
const routeId = resolveStudioAdminRouteId(pathname);
if (!routeId) return null;
+ if (routeId === 'bindings') {
+ const nodeId = resolveStudioBindingsNodeId(pathname);
+ return nodeId ? createStudioBindingsRoutePath(nodeId) : null;
+ }
if (routeId === 'properties') {
const nodeId = resolveStudioPropertiesNodeId(pathname);
return nodeId ? createStudioPropertiesRoutePath(nodeId) : null;
@@ -162,21 +184,16 @@ export function resolveStudioAdminRoutePath(pathname: string): StudioAdminRouteP
return getStudioAdminRouteDefinition(routeId).path;
}
-export function resolveStudioPropertiesNodeId(pathname: string): string | null {
- if (!pathname.startsWith(PROPERTIES_ROUTE_PREFIX)) {
- return null;
- }
+export function resolveStudioBindingsNodeId(pathname: string): string | null {
+ return resolveStudioContextNodeId(pathname, BINDINGS_ROUTE_PREFIX);
+}
- const [encodedNodeId] = pathname.slice(PROPERTIES_ROUTE_PREFIX.length).split('/');
- if (!encodedNodeId) {
- return null;
- }
+export function createStudioBindingsRoutePath(nodeId: string): `/ankh/bindings/${string}` {
+ return `/ankh/bindings/${encodeURIComponent(nodeId)}`;
+}
- try {
- return decodeURIComponent(encodedNodeId);
- } catch {
- return encodedNodeId;
- }
+export function resolveStudioPropertiesNodeId(pathname: string): string | null {
+ return resolveStudioContextNodeId(pathname, PROPERTIES_ROUTE_PREFIX);
}
export function createStudioPropertiesRoutePath(nodeId: string): `/ankh/properties/${string}` {
@@ -187,6 +204,9 @@ export function createStudioAdminRoutePath(args: {
routeId: StudioAdminRouteId;
selectedNodeId?: string | null;
}): StudioAdminRoutePath | null {
+ if (args.routeId === 'bindings') {
+ return args.selectedNodeId ? createStudioBindingsRoutePath(args.selectedNodeId) : null;
+ }
if (args.routeId === 'properties') {
return args.selectedNodeId ? createStudioPropertiesRoutePath(args.selectedNodeId) : null;
}
@@ -198,7 +218,7 @@ export function isStudioAdminRouteAvailable(
routeId: StudioAdminRouteId,
context: StudioAdminRouteAvailabilityContext,
): boolean {
- if (routeId === 'properties') {
+ if (routeId === 'bindings' || routeId === 'properties') {
return context.selectedNodeId !== null;
}
@@ -238,6 +258,7 @@ export function createStudioAdminRouteRenderState(args: {
routeAdminId,
resolvedAdminRouteId,
routeAdminPath,
+ bindingsNodeId: resolveStudioBindingsNodeId(args.pathname),
propertiesNodeId: resolveStudioPropertiesNodeId(args.pathname),
shouldRenderAppContent: routeAdminId === null,
shouldRenderAdminShell: routeAdminId !== null,
@@ -282,3 +303,14 @@ export function resolveStudioLastNonAdminLocation(args: {
if (isStudioAdminPath(args.pathname)) return null;
return args.navigableLocation ?? resolveStudioNavigableLocation(args.pathname);
}
+
+function resolveStudioContextNodeId(pathname: string, prefix: string): string | null {
+ if (!pathname.startsWith(prefix)) return null;
+ const [encodedNodeId] = pathname.slice(prefix.length).split('/');
+ if (!encodedNodeId) return null;
+ try {
+ return decodeURIComponent(encodedNodeId);
+ } catch {
+ return encodedNodeId;
+ }
+}
diff --git a/src/ui/admin/AnkhAdminPage.test.ts b/src/ui/admin/AnkhAdminPage.test.ts
index 3f045587..133af53f 100644
--- a/src/ui/admin/AnkhAdminPage.test.ts
+++ b/src/ui/admin/AnkhAdminPage.test.ts
@@ -14,8 +14,11 @@ test('uses a declarative UI page registry for every admin route id', () => {
expect(source).not.toContain("if (routeId === '");
});
-test('uses canonical properties decoding in the public page boundary', () => {
+test('uses canonical contextual node decoding in the public page boundary', () => {
+ expect(source).toContain('resolveStudioBindingsNodeId');
expect(source).toContain('resolveStudioPropertiesNodeId');
+ expect(source).not.toContain("'/ankh/bindings/' +");
+ expect(source).not.toContain('`/ankh/bindings/${');
expect(source).not.toContain("'/ankh/properties/' +");
expect(source).not.toContain('`/ankh/properties/${');
});
diff --git a/src/ui/admin/AnkhAdminPage.tsx b/src/ui/admin/AnkhAdminPage.tsx
index 1cb73b17..f44bd04d 100644
--- a/src/ui/admin/AnkhAdminPage.tsx
+++ b/src/ui/admin/AnkhAdminPage.tsx
@@ -3,9 +3,13 @@ import React from 'react';
import { useStudio } from '../../core/StudioContext';
import type { StudioAdminRouteId, StudioContextValue } from '../../index';
-import { resolveStudioPropertiesNodeId } from '../../studioAdminRouteModel';
+import {
+ resolveStudioBindingsNodeId,
+ resolveStudioPropertiesNodeId,
+} from '../../studioAdminRouteModel';
import { ApisAdminPage, type ApisAdminRouteId } from './pages/ApisAdminPage';
import { AuthAdminPage, type AuthAdminPageProps } from './pages/AuthAdminPage';
+import { BindingsAdminPage } from './pages/BindingsAdminPage';
import { OverviewAdminPage } from './pages/OverviewAdminPage';
import { PropertiesAdminPage } from './pages/PropertiesAdminPage';
import { SecretsAdminPage } from './pages/SecretsAdminPage';
@@ -59,6 +63,7 @@ const ADMIN_PAGE_RENDERERS = {
),
secrets: ({ studio }) => ,
theme: () => ,
+ bindings: ({ pathname }) => ,
properties: ({ pathname }) => (
),
diff --git a/src/ui/admin/pages/BindingsAdminPage.tsx b/src/ui/admin/pages/BindingsAdminPage.tsx
new file mode 100644
index 00000000..b000fc15
--- /dev/null
+++ b/src/ui/admin/pages/BindingsAdminPage.tsx
@@ -0,0 +1,84 @@
+import type { UiComponentMetaRegistry } from '@ankhorage/contracts';
+import { Card, Text, ZORA_BINDABLE_COMPONENT_META } from '@ankhorage/zora';
+import React from 'react';
+
+import {
+ collectStudioBindingOperationOptions,
+ diagnoseStudioComponentBindings,
+} from '../../../bindingAuthoringModel';
+import { useStudio } from '../../../core/StudioContext';
+import { ACTION_REGISTRY } from '../../../index';
+import { findNodeInManifest, findScreenIdForNode } from '../../../manifestState';
+import { AdminHeader, AdminScroll, KeyValue } from '../adminPagePrimitives';
+import { BindingDiagnosticsCard } from './bindings/BindingDiagnosticsCard';
+import { EventBindingsCard } from './bindings/EventBindingsCard';
+import { PropertyBindingsCard } from './bindings/PropertyBindingsCard';
+
+const BINDABLE_COMPONENT_META: UiComponentMetaRegistry = ZORA_BINDABLE_COMPONENT_META;
+
+export function BindingsAdminPage({ nodeId }: { readonly nodeId: string | null }) {
+ const studio = useStudio();
+ const owningScreenId =
+ nodeId && studio.manifest ? findScreenIdForNode(studio.manifest, nodeId) : null;
+ const owningRoot = owningScreenId ? studio.manifest?.screens[owningScreenId]?.root : null;
+ const node = owningRoot && nodeId ? findNodeInManifest(owningRoot, nodeId) : null;
+
+ React.useEffect(() => {
+ if (!nodeId || !node || !owningScreenId) return;
+ studio.setActiveScreenId(owningScreenId);
+ studio.selectNode(nodeId);
+ }, [node, nodeId, owningScreenId, studio]);
+
+ if (!node || !studio.manifest) {
+ return (
+
+
+
+
+ The requested node could not be resolved in the current project manifest.
+
+
+
+ );
+ }
+
+ const registry = studio.manifest.dataBindings ?? {};
+ const operations = collectStudioBindingOperationOptions(studio.manifest.dataSources ?? {});
+ const diagnostics = diagnoseStudioComponentBindings({
+ node,
+ registry,
+ componentMeta: BINDABLE_COMPONENT_META,
+ operations,
+ actionTypes: Object.keys(ACTION_REGISTRY),
+ });
+
+ return (
+
+
+
+
+
+ {node.alias ? : null}
+
+
+
+
+
+ );
+}
diff --git a/src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx b/src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx
new file mode 100644
index 00000000..2c1a8fcf
--- /dev/null
+++ b/src/ui/admin/pages/bindings/BindingDiagnosticsCard.tsx
@@ -0,0 +1,37 @@
+import { Card, Text } from '@ankhorage/zora';
+import { View } from 'react-native';
+
+import type { StudioBindingDiagnostic } from '../../../../bindingAuthoringModel';
+import { bindingAdminStyles } from './bindingAdminStyles';
+
+export function BindingDiagnosticsCard(props: {
+ readonly diagnostics: readonly StudioBindingDiagnostic[];
+}) {
+ return (
+
+
+ {props.diagnostics.length === 0 ? (
+
+ No binding diagnostics for this component.
+
+ ) : (
+ props.diagnostics.map((diagnostic, index) => (
+
+
+ {diagnostic.message}
+
+ {diagnostic.path ? (
+
+ {diagnostic.path}
+
+ ) : null}
+
+ ))
+ )}
+
+
+ );
+}
diff --git a/src/ui/admin/pages/bindings/EventBindingComposer.tsx b/src/ui/admin/pages/bindings/EventBindingComposer.tsx
new file mode 100644
index 00000000..dfdd604c
--- /dev/null
+++ b/src/ui/admin/pages/bindings/EventBindingComposer.tsx
@@ -0,0 +1,172 @@
+import type { EventBinding, UiBindableEventMeta } from '@ankhorage/contracts';
+import { Button, Input, Select, Text } from '@ankhorage/zora';
+import { useEffect, useMemo, useState } from 'react';
+import { View } from 'react-native';
+
+import {
+ createStudioActionInputFields,
+ type StudioBindingInputFieldOption,
+ type StudioBindingOperationOption,
+} from '../../../../bindingAuthoringModel';
+import { ACTION_REGISTRY } from '../../../../index';
+import { Field } from '../../adminPagePrimitives';
+import { bindingAdminStyles } from './bindingAdminStyles';
+import {
+ createStudioEventBinding,
+ createStudioEventInputDrafts,
+ createStudioOperationKey,
+ findStudioOperationByKey,
+ type StudioEventInputDraft,
+ type StudioEventInputSourceKind,
+} from './bindingEditorModel';
+
+const TARGET_OPTIONS = [
+ { value: 'action', label: 'Action' },
+ { value: 'operation', label: 'Data-source operation' },
+] as const;
+const INPUT_SOURCE_OPTIONS: readonly { value: StudioEventInputSourceKind; label: string }[] = [
+ { value: 'event', label: 'Event payload' },
+ { value: 'literal', label: 'Literal' },
+];
+const ACTION_OPTIONS = Object.values(ACTION_REGISTRY).map((action) => ({
+ value: action.type,
+ label: action.label,
+}));
+
+export function EventBindingComposer(props: {
+ readonly eventMeta: UiBindableEventMeta;
+ readonly operations: readonly StudioBindingOperationOption[];
+ readonly onAdd: (binding: EventBinding) => void;
+}) {
+ const { eventMeta, onAdd, operations } = props;
+ const [targetKind, setTargetKind] = useState<'action' | 'operation'>('action');
+ const [actionType, setActionType] = useState(ACTION_OPTIONS[0]?.value ?? 'navigate');
+ const [operationKey, setOperationKey] = useState(
+ operations[0] ? createStudioOperationKey(operations[0].operation) : '',
+ );
+ const selectedOperation = findStudioOperationByKey(operations, operationKey);
+ const fields = useMemo(
+ () =>
+ targetKind === 'action'
+ ? createStudioActionInputFields(ACTION_REGISTRY[actionType]?.payloadSchema)
+ : (selectedOperation?.inputFields ?? []),
+ [actionType, selectedOperation?.inputFields, targetKind],
+ );
+ const eventFields = useMemo(() => eventMeta.payload?.fields ?? [], [eventMeta.payload?.fields]);
+ const [drafts, setDrafts] = useState>>({});
+
+ useEffect(() => {
+ setDrafts(createStudioEventInputDrafts(fields, eventFields));
+ }, [eventFields, fields]);
+
+ const add = () => {
+ const target =
+ targetKind === 'action'
+ ? ({ kind: 'action', type: actionType } as const)
+ : selectedOperation
+ ? ({ kind: 'operation', operation: selectedOperation.operation } as const)
+ : null;
+ if (!target) return;
+ onAdd(createStudioEventBinding({ target, fields, drafts }));
+ };
+
+ return (
+
+
+
+
+
+
+
+
+ {targetKind === 'action' ? (
+
+
+
+ ) : (
+
+
+ )}
+
+
+ {targetKind === 'operation' && selectedOperation ? (
+
+ {selectedOperation.sourceLabel}
+
+ ) : null}
+ field.path)}
+ drafts={drafts}
+ onChange={setDrafts}
+ />
+
+
+ );
+}
+
+function EventInputDrafts(props: {
+ readonly fields: readonly StudioBindingInputFieldOption[];
+ readonly eventFields: readonly string[];
+ readonly drafts: Readonly>;
+ readonly onChange: (drafts: Readonly>) => void;
+}) {
+ if (props.fields.length === 0) {
+ return (
+
+ This target has no declared inputs.
+
+ );
+ }
+
+ return (
+
+ {props.fields.map((field) => {
+ const draft = props.drafts[field.name] ?? { kind: 'literal' as const, value: '' };
+ return (
+
+
+
+
+
+
+
+
+ props.onChange({ ...props.drafts, [field.name]: { ...draft, value } })
+ }
+ />
+
+
+
+ );
+ })}
+ {props.eventFields.length > 0 ? (
+
+ Known payload paths: {props.eventFields.join(', ')}. Nested paths may be entered manually.
+
+ ) : null}
+
+ );
+}
diff --git a/src/ui/admin/pages/bindings/EventBindingsCard.tsx b/src/ui/admin/pages/bindings/EventBindingsCard.tsx
new file mode 100644
index 00000000..100f3786
--- /dev/null
+++ b/src/ui/admin/pages/bindings/EventBindingsCard.tsx
@@ -0,0 +1,114 @@
+import type { ComponentDataBindingRegistry, UiNode } from '@ankhorage/contracts';
+import { Button, Card, Text, ZORA_BINDABLE_COMPONENT_META } from '@ankhorage/zora';
+import { View } from 'react-native';
+
+import {
+ appendStudioEventBinding,
+ removeStudioEventBinding,
+ resolveStudioBindableEvents,
+ type StudioBindingOperationOption,
+} from '../../../../bindingAuthoringModel';
+import { bindingAdminStyles } from './bindingAdminStyles';
+import { EventBindingComposer } from './EventBindingComposer';
+
+export function EventBindingsCard(props: {
+ readonly node: UiNode;
+ readonly registry: ComponentDataBindingRegistry;
+ readonly operations: readonly StudioBindingOperationOption[];
+ readonly onChange: (registry: ComponentDataBindingRegistry) => void;
+}) {
+ const options = resolveStudioBindableEvents(props.node, ZORA_BINDABLE_COMPONENT_META);
+ const current = props.registry[props.node.id]?.events ?? {};
+
+ return (
+
+
+
+ Component events come from ZORA metadata. Bind them to canonical actions or data-source
+ operations; Runtime remains responsible for execution.
+
+ {options.map((option) => (
+
+ {option.label}
+
+ {(current[option.name] ?? []).map((binding, index) => (
+
+
+ {describeEventBinding(binding)}
+
+ {describeBindingInput(binding.input)}
+
+
+
+
+ ))}
+
+ props.onChange(
+ appendStudioEventBinding(props.registry, props.node, option.name, binding),
+ )
+ }
+ />
+
+
+ ))}
+ {options.length === 0 ? (
+
+ This component exposes no bindable events.
+
+ ) : null}
+
+
+ );
+}
+
+function EventPayloadSummary(props: {
+ readonly fields: readonly {
+ readonly path: string;
+ readonly type: string;
+ readonly label?: string;
+ }[];
+}) {
+ return (
+
+ {props.fields.length > 0
+ ? `Payload: ${props.fields.map((field) => `${field.label ?? field.path} (${field.type})`).join(', ')}`
+ : 'Payload: none'}
+
+ );
+}
+
+function describeEventBinding(binding: {
+ readonly target:
+ | { readonly kind: 'action'; readonly type: string }
+ | {
+ readonly kind: 'operation';
+ readonly operation: {
+ readonly dataSourceId: string;
+ readonly endpointId?: string;
+ readonly operationId: string;
+ };
+ };
+ readonly input?: Readonly>;
+}): string {
+ if (binding.target.kind === 'action') return `Action · ${binding.target.type}`;
+ const { dataSourceId, endpointId, operationId } = binding.target.operation;
+ return `Operation · ${dataSourceId} · ${endpointId ?? ''} · ${operationId}`;
+}
+
+function describeBindingInput(input: Readonly> | undefined): string {
+ const keys = Object.keys(input ?? {});
+ return keys.length > 0 ? `Inputs: ${keys.join(', ')}` : 'No mapped inputs';
+}
diff --git a/src/ui/admin/pages/bindings/PropertyBindingEditor.tsx b/src/ui/admin/pages/bindings/PropertyBindingEditor.tsx
new file mode 100644
index 00000000..7a226538
--- /dev/null
+++ b/src/ui/admin/pages/bindings/PropertyBindingEditor.tsx
@@ -0,0 +1,174 @@
+import type { PropBinding } from '@ankhorage/contracts';
+import { Button, Input, Select, Text } from '@ankhorage/zora';
+import { View } from 'react-native';
+
+import {
+ assessStudioBindingCompatibility,
+ type StudioBindablePropOption,
+ type StudioBindingOperationOption,
+} from '../../../../bindingAuthoringModel';
+import { Field } from '../../adminPagePrimitives';
+import { bindingAdminStyles } from './bindingAdminStyles';
+import {
+ createStudioOperationKey,
+ createStudioPropBindingForSource,
+ findStudioOperationByKey,
+ formatStudioBindingLiteral,
+ parseStudioBindingLiteral,
+ STUDIO_BINDING_SOURCE_OPTIONS,
+ type StudioBindingSourceKind,
+} from './bindingEditorModel';
+
+export function PropertyBindingEditor(props: {
+ readonly option: StudioBindablePropOption;
+ readonly binding: PropBinding | undefined;
+ readonly operations: readonly StudioBindingOperationOption[];
+ readonly onChange: (binding: PropBinding) => void;
+ readonly onRemove: () => void;
+}) {
+ const { binding, onChange, onRemove, option, operations } = props;
+ const operationOptions = operations.map((operation) => ({
+ value: createStudioOperationKey(operation.operation),
+ label: operation.label,
+ }));
+ const sourceKind = binding?.source.kind ?? 'literal';
+
+ return (
+
+
+
+
+
+
+ {binding ? (
+
+ ) : null}
+
+ {binding ? (
+
+ ) : (
+
+ )}
+
+ );
+}
+
+function PropertyBindingSourceFields(props: {
+ readonly binding: PropBinding;
+ readonly expected: StudioBindablePropOption['meta']['value'];
+ readonly operations: readonly StudioBindingOperationOption[];
+ readonly operationOptions: readonly { readonly value: string; readonly label: string }[];
+ readonly onChange: (binding: PropBinding) => void;
+}) {
+ const { binding, expected, onChange, operationOptions, operations } = props;
+ const { source } = binding;
+
+ if (source.kind === 'literal') {
+ if (expected.type === 'boolean') {
+ return (
+