import { TagGroupMode } from 'src/model/models/tag.models'; import { ClusterConfig } from '../../cluster/models/config.models'; import { ViewConfig } from '../../model/models/view-config.models'; /** * A dimension that a fact sheet type can be clustered or viewed (coloured) by. * Produced by `parseModels` — one entry per field, relation, or tag group * that the workspace schema exposes for the given fact-sheet type. */ export declare type Specification = FieldSpecification | RelationSpecification | TagSpecification; /** * A specification backed by a direct field on the fact sheet (e.g. lifecycle, a single-select dropdown). */ export interface FieldSpecification { type: 'field'; name: string; view: ViewConfig | null; cluster: ClusterConfig | null; attributeDescription: AttributeDescription; } /** * A specification backed by a relation to another fact-sheet type (e.g. "Business Capability"). * Used for clustering — grouping fact sheets by what they're linked to. */ export interface RelationSpecification { type: 'relation'; name: string; cluster: ClusterConfig | null; attributeDescription: TargetFieldDescription; } /** * A specification backed by a tag group (e.g. "Compliance" with tags GDPR, SOC2, HIPAA). */ export interface TagSpecification { type: 'tag'; name: string; view: ViewConfig | null; cluster: ClusterConfig | null; mode: TagGroupMode; attributeDescription: FieldDescription; } /** * Describes one field to fetch from the API and how to locate it in the response. * Used by `mapAttributesToQuery` to build GraphQL selections and by * `mapFactSheetToAttributeMap` to extract values from the response. */ export declare type AttributeDescription = FieldDescription | RelationFieldDescription | TargetFieldDescription; /** A field that lives directly on the fact sheet (e.g. `lxState`, `technicalFit`). */ export interface FieldDescription { type: 'field'; name: string; field: string; fieldType: FieldType; subscriptionRole?: string; } /** A field that lives on the relation edge itself (e.g. `usageType` on relApplicationToUserGroup). */ export interface RelationFieldDescription { type: 'relationField'; name: string; field: string; fieldType: FieldType; relation: string; targetFactSheetType: string; activeOnly: boolean; } /** A field on the target fact sheet reached via a relation (e.g. DataObject.dataClassification via relApplicationToDataObject). */ export interface TargetFieldDescription { type: 'targetField'; name: string; field: string; fieldType: FieldType; relation: string; activeOnly: boolean; /** The Fact Sheet type of the target Fact Sheet. A '*' means that any Fact Sheet type is possible. */ targetFactSheetType: string; constrainedBy?: string[]; oppositeRelation?: string; requestTypeForConstrainedBy?: boolean; } export declare type FieldType = 'AGGREGATED' | 'COMPLETION' | 'DATE_TIME' | 'DOUBLE' | 'EXTERNAL_ID' | 'INTEGER' | 'LIFECYCLE' | 'LOCATION' | 'LX_MILESTONES' | 'LX_STATE' | 'MULTIPLE_SELECT' | 'PROJECT_STATUS' | 'QUALITYSEALSTATUS' | 'READ_ACCESS_CONTROL_LIST' | 'RELATION' | 'SEARCH_BASED' | 'SINGLE_SELECT' | 'STATUS' | 'STRING' | 'SUBSCRIPTIONS' | 'TAGS' | 'WRITE_ACCESS_CONTROL_LIST';