import type { MemoElement } from './semantic.js'; import type { OntologyRegistriesDTO } from './relationship-legality.js'; /** The activity symbols an action-flow view draws. */ export type ActivityNodeType = 'action' | 'accept' | 'send' | 'fork' | 'join' | 'decision' | 'merge' | 'activityFinal' | 'flowFinal'; /** One notation role, anchored on the metaclass whose instances draw as it. */ export interface ActivityNotationRole { role: ActivityNodeType; /** SysML v2 metaclass; every subtype of it draws as this role. */ metaclass: string; /** Production in `bnf/SysML-graphical-bnf.kgbnf`, where one names it. */ bnfProduction?: string; } /** * Role bindings, unordered. * * Deliberately not written in precedence order — `activityRolesBySpecificity()` * derives that from the metamodel, so adding a binding cannot put it in the * wrong place. */ export declare const ACTIVITY_NOTATION_ROLES: readonly ActivityNotationRole[]; /** * MEMO grammar literals for `ControlNodeUsage.controlKind`, bound to the * metaclasses they name. * * The four values come from MEMO's own Langium grammar, so they are not * derivable from `SysML.ecore` — but their targets are, and * `controlKindMetaclassesAreControlNodes()` asserts that these four are exactly * the metamodel's `ControlNode` subtypes. A fifth control node upstream fails * that check rather than silently going unclassified. */ export declare const CONTROL_KIND_METACLASS: Readonly>; /** True when the bindings above still match the metamodel's control nodes. */ export declare function controlKindMetaclassesAreControlNodes(): boolean; /** * Roles most-specific first, by supertype depth. * * `ForkNode` sits three levels below `ActionUsage`, so it is tried first and an * `ActionUsage` anchor never swallows a control node. Computed rather than * declared, because the metamodel already knows the answer. */ export declare function activityRolesBySpecificity(): ActivityNotationRole[]; /** * The activity symbol this element draws as, or `undefined` if it is not an * activity node at all. * * `registries` is optional: without it, classification uses the metamodel * alone, which is what a caller holding a bare element can do. With it, an * ontology kind reaches its role through its declared specialization chain — * which is the path a project extends. */ export declare function activityNodeType(element: MemoElement, registries?: OntologyRegistriesDTO): ActivityNodeType | undefined; /** Control nodes flow through the graph but own no responsibility lane. */ export declare function isControlNode(element: MemoElement, registries?: OntologyRegistriesDTO): boolean; //# sourceMappingURL=activity-notation.d.ts.map