{
  "type": "record",
  "Aspect": {
    "name": "dataHubPageModuleProperties",
    "schemaVersion": 3
  },
  "name": "DataHubPageModuleProperties",
  "namespace": "com.linkedin.pegasus2avro.module",
  "fields": [
    {
      "type": "string",
      "name": "name",
      "doc": "The display name of this module"
    },
    {
      "Searchable": {
        "fieldType": "KEYWORD"
      },
      "type": {
        "type": "enum",
        "symbolDocs": {
          "AGENTS": "Module surfacing a roster of AI agents. Distinct from AGENT_CARD\n(which features a single agent) \u2014 this is the multi-agent listing.",
          "AGENT_CARD": "Module displaying a single AI agent as a featured card (hero greeter or compact tile).\nUsed on Domain / Data Product summaries and HomePage to surface conversational agents.",
          "ASSETS": "Module displaying the assets of parent entity",
          "ASSET_COLLECTION": "A module with a collection of assets",
          "CHILD_HIERARCHY": "Module displaying the hierarchy of the children of a given entity. Glossary or Domains.",
          "COLUMNS": "Module displaying the columns of a dataset",
          "DATA_PRODUCTS": "Module displaying child data products of a given domain",
          "DOCUMENT_STATS": "Module displaying stats tiles for the Context Documents corpus.",
          "DOCUMENT_USAGE": "Module displaying a time-series chart of Context Document authorship activity, split by humans vs AI agents.",
          "DOMAINS": "Module displaying the top domains",
          "HIERARCHY": "A module displaying a hierarchy to navigate",
          "LINEAGE": "Module displaying the lineage of an asset",
          "LINK": "Link type module",
          "MY_DOCUMENTS": "Module displaying Context Documents owned by the current user.",
          "OWNED_ASSETS": "Module displaying assets owned by a user",
          "PLATFORMS": "Module displaying the platforms in an instance",
          "RECENT_DOCUMENTS": "Module displaying recently modified Context Documents.",
          "RELATED_TERMS": "Module displaying the related terms of a given glossary term",
          "RICH_TEXT": "Module containing rich text to be rendered",
          "SUBSCRIBED_ASSETS": "Module displaying assets subscribed to by a given user",
          "UNKNOWN": "Unknown module type - this can occur with corrupted data or rolling back to versions without new modules",
          "WORKFLOWS": "Module displaying workflows that can be started"
        },
        "name": "DataHubPageModuleType",
        "namespace": "com.linkedin.pegasus2avro.module",
        "symbols": [
          "LINK",
          "RICH_TEXT",
          "ASSET_COLLECTION",
          "HIERARCHY",
          "OWNED_ASSETS",
          "DOMAINS",
          "ASSETS",
          "CHILD_HIERARCHY",
          "DATA_PRODUCTS",
          "RELATED_TERMS",
          "SUBSCRIBED_ASSETS",
          "WORKFLOWS",
          "PLATFORMS",
          "LINEAGE",
          "COLUMNS",
          "AGENT_CARD",
          "AGENTS",
          "DOCUMENT_STATS",
          "RECENT_DOCUMENTS",
          "MY_DOCUMENTS",
          "DOCUMENT_USAGE",
          "UNKNOWN"
        ],
        "doc": "Enum containing the types of page modules that there are"
      },
      "name": "type",
      "doc": "The type of this module - the purpose it serves"
    },
    {
      "type": {
        "type": "record",
        "name": "DataHubPageModuleVisibility",
        "namespace": "com.linkedin.pegasus2avro.module",
        "fields": [
          {
            "Searchable": {
              "fieldType": "KEYWORD"
            },
            "type": {
              "type": "enum",
              "symbolDocs": {
                "GLOBAL": "This module is discoverable and can be used by any user on the platform",
                "PERSONAL": "This module is used for individual use only"
              },
              "name": "PageModuleScope",
              "namespace": "com.linkedin.pegasus2avro.module",
              "symbols": [
                "PERSONAL",
                "GLOBAL"
              ]
            },
            "name": "scope",
            "doc": "Audit stamp for when and by whom this module was created"
          }
        ],
        "doc": "Info about the visibility of this module"
      },
      "name": "visibility",
      "doc": "Info about the visibility of this module"
    },
    {
      "type": {
        "type": "record",
        "name": "DataHubPageModuleParams",
        "namespace": "com.linkedin.pegasus2avro.module",
        "fields": [
          {
            "type": [
              "null",
              {
                "type": "record",
                "name": "LinkModuleParams",
                "namespace": "com.linkedin.pegasus2avro.module",
                "fields": [
                  {
                    "type": "string",
                    "name": "linkUrl"
                  },
                  {
                    "type": [
                      "null",
                      "string"
                    ],
                    "name": "imageUrl",
                    "default": null
                  },
                  {
                    "type": [
                      "null",
                      "string"
                    ],
                    "name": "description",
                    "default": null
                  }
                ]
              }
            ],
            "name": "linkParams",
            "default": null,
            "doc": "The params required if the module is type LINK"
          },
          {
            "type": [
              "null",
              {
                "type": "record",
                "name": "RichTextModuleParams",
                "namespace": "com.linkedin.pegasus2avro.module",
                "fields": [
                  {
                    "type": "string",
                    "name": "content"
                  }
                ]
              }
            ],
            "name": "richTextParams",
            "default": null,
            "doc": "The params required if the module is type RICH_TEXT"
          },
          {
            "type": [
              "null",
              {
                "type": "record",
                "name": "AssetCollectionModuleParams",
                "namespace": "com.linkedin.pegasus2avro.module",
                "fields": [
                  {
                    "type": {
                      "type": "array",
                      "items": "string"
                    },
                    "name": "assetUrns",
                    "Urn": "Urn",
                    "urn_is_array": true
                  },
                  {
                    "type": [
                      "null",
                      "string"
                    ],
                    "name": "dynamicFilterJson",
                    "default": null,
                    "doc": "Optional dynamic filters\n\nThe stringified json representing the logical predicate built in the UI to select assets.\nThis predicate is turned into orFilters to send through graphql since graphql doesn't support\narbitrary nesting. This string is used to restore the UI for this logical predicate."
                  }
                ],
                "doc": "The params required if the module is type ASSET_COLLECTION"
              }
            ],
            "name": "assetCollectionParams",
            "default": null,
            "doc": "The params required if the module is type ASSET_COLLECTION"
          },
          {
            "type": [
              "null",
              {
                "type": "record",
                "name": "HierarchyModuleParams",
                "namespace": "com.linkedin.pegasus2avro.module",
                "fields": [
                  {
                    "type": [
                      "null",
                      {
                        "type": "array",
                        "items": "string"
                      }
                    ],
                    "name": "assetUrns",
                    "default": null,
                    "Urn": "Urn",
                    "urn_is_array": true
                  },
                  {
                    "type": "boolean",
                    "name": "showRelatedEntities"
                  },
                  {
                    "type": [
                      "null",
                      "string"
                    ],
                    "name": "relatedEntitiesFilterJson",
                    "default": null,
                    "doc": "Optional filters to filter relatedEntities (assetUrns) out\n\nThe stringified json representing the logical predicate built in the UI to select assets.\nThis predicate is turned into orFilters to send through graphql since graphql doesn't support\narbitrary nesting. This string is used to restore the UI for this logical predicate."
                  }
                ],
                "doc": "The params required if the module is type HIERARCHY_VIEW"
              }
            ],
            "name": "hierarchyViewParams",
            "default": null,
            "doc": "The params required if the module is type HIERARCHY_VIEW"
          },
          {
            "type": [
              "null",
              {
                "type": "record",
                "name": "AgentCardModuleParams",
                "namespace": "com.linkedin.pegasus2avro.module",
                "fields": [
                  {
                    "Relationship": {
                      "entityTypes": [
                        "aiAgent"
                      ],
                      "name": "AgentCardAgent"
                    },
                    "java": {
                      "class": "com.linkedin.pegasus2avro.common.urn.Urn"
                    },
                    "type": "string",
                    "name": "agentUrn",
                    "doc": "URN of the AI agent to feature in this module.",
                    "Urn": "Urn",
                    "entityTypes": [
                      "aiAgent"
                    ]
                  },
                  {
                    "type": {
                      "type": "enum",
                      "symbolDocs": {
                        "CHAT": "Full-width inline chat composer on the page. Typically the primary\nagent surface on a domain or data product summary.",
                        "LINK": "Compact clickable card \u2014 avatar + name + description. Click opens\nthe agent's default surface (chat, summary, or another tab \u2014\nresolved by the agent's own configuration, not by this enum)."
                      },
                      "name": "AgentCardDisplayMode",
                      "namespace": "com.linkedin.pegasus2avro.module",
                      "symbols": [
                        "CHAT",
                        "LINK"
                      ],
                      "doc": "Display mode for an AGENT_CARD page module. Determines how the module\nrenders on a page template \u2014 as an inline chat experience or as a\ncompact link card."
                    },
                    "name": "displayMode",
                    "doc": "Whether to render as a full-width hero or a compact tile.\nDefaults to CARD at the resolver level when omitted."
                  }
                ],
                "doc": "The params required if the module is type AGENT_CARD.\n\nAn AGENT_CARD module pins a single AI agent to a page template. Used on\nboth AssetSummary surfaces (Domain, Data Product pages) and HomePage. The\ndisplayMode field selects the rendered shape; the page template designer\nis the only place these are added/removed."
              }
            ],
            "name": "agentCardParams",
            "default": null,
            "doc": "The params required if the module is type AGENT_CARD"
          }
        ],
        "doc": "The specific parameters stored for a module"
      },
      "name": "params",
      "doc": "The specific parameters stored for this module"
    },
    {
      "Searchable": {
        "/actor": {
          "fieldName": "createdBy",
          "fieldType": "URN"
        },
        "/time": {
          "fieldName": "createdAt",
          "fieldType": "DATETIME"
        }
      },
      "type": {
        "type": "record",
        "name": "AuditStamp",
        "namespace": "com.linkedin.pegasus2avro.common",
        "fields": [
          {
            "type": "long",
            "name": "time",
            "doc": "When did the resource/association/sub-resource move into the specific lifecycle stage represented by this AuditEvent."
          },
          {
            "java": {
              "class": "com.linkedin.pegasus2avro.common.urn.Urn"
            },
            "type": "string",
            "name": "actor",
            "doc": "The entity (e.g. a member URN) which will be credited for moving the resource/association/sub-resource into the specific lifecycle stage. It is also the one used to authorize the change.",
            "Urn": "Urn"
          },
          {
            "java": {
              "class": "com.linkedin.pegasus2avro.common.urn.Urn"
            },
            "type": [
              "null",
              "string"
            ],
            "name": "impersonator",
            "default": null,
            "doc": "The entity (e.g. a service URN) which performs the change on behalf of the Actor and must be authorized to act as the Actor.",
            "Urn": "Urn"
          },
          {
            "type": [
              "null",
              "string"
            ],
            "name": "message",
            "default": null,
            "doc": "Additional context around how DataHub was informed of the particular change. For example: was the change created by an automated process, or manually."
          }
        ],
        "doc": "Data captured on a resource/association/sub-resource level giving insight into when that resource/association/sub-resource moved into a particular lifecycle stage, and who acted to move it into that specific lifecycle stage."
      },
      "name": "created",
      "doc": "Audit stamp for when and by whom this template was created"
    },
    {
      "Searchable": {
        "/time": {
          "fieldName": "lastModifiedAt",
          "fieldType": "DATETIME"
        }
      },
      "type": "com.linkedin.pegasus2avro.common.AuditStamp",
      "name": "lastModified",
      "doc": "Audit stamp for when and by whom this template was last updated"
    }
  ],
  "doc": "The main properties of a DataHub page module"
}