import type { BulkStructureConvention, BulkStructureEntityType, BulkStructureRoot } from '../types/bulkStructure'; /** * Canonical hierarchy used by the bulk insert feature. * * The order defines the allowed nesting: * * phase * milestone * activity * task * * Depending on where bulk insert is opened, the hierarchy starts * at a different level. * * Examples: * * getLevelsForRoot('phase') * -> ['phase', 'milestone', 'activity', 'task'] * * getLevelsForRoot('milestone') * -> ['milestone', 'activity', 'task'] * * getLevelsForRoot('activity') * -> ['activity', 'task'] */ export declare const HIERARCHY: readonly BulkStructureEntityType[]; /** * Canonical indentation convention. * * One hierarchy level currently equals one space. * * Example: * * Phase 1 * Milestone 1 * Activity 1 * Task 1 * * The parser and the UI example generator both rely on this * configuration so they always use the same indentation rules. */ export declare const INDENT_CONFIG: { readonly indentSize: 1; readonly indentCharacter: " "; }; /** * Returns the hierarchy levels available from a given root type. * * Example: * * getLevelsForRoot('milestone') * * returns: * * ['milestone', 'activity', 'task'] * * This is what allows the same parser to work when bulk insert is * opened from a phase, milestone or activity. */ export declare function getLevelsForRoot(rootType: BulkStructureRoot): BulkStructureEntityType[]; /** * Returns the complete convention used by the parser for a root type. * * Example: * * getBulkStructureConvention('milestone') * * returns: * * { * rootType: 'milestone', * levels: ['milestone', 'activity', 'task'], * indentSize: 1, * indentCharacter: ' ' * } * * The parser can then map indentation level to entity type: * * Milestone 1 -> level 0 -> milestone * Activity 1 -> level 1 -> activity * Task 1 -> level 2 -> task */ export declare function getBulkStructureConvention(rootType: BulkStructureRoot): BulkStructureConvention; /** * Returns the string representing exactly one indentation level. * * With the current configuration: * * getIndentUnit() * -> ' ' * * If indentSize became 2: * * getIndentUnit() * -> ' ' */ export declare function getIndentUnit(convention?: Pick): string; /** * Returns the indentation prefix for a specific hierarchy level. * * With the current one-space convention: * * getIndentPrefix(0) -> '' * getIndentPrefix(1) -> ' ' * getIndentPrefix(2) -> ' ' * getIndentPrefix(3) -> ' ' * * This is mainly used to generate examples that follow exactly * the same convention as the parser. */ export declare function getIndentPrefix(level: number, convention?: Pick): string; /** * Generates a textual example of the hierarchy for a given root type. * * This helper is responsible for hierarchy and indentation only. * It does not contain user-facing labels or translations. * * Labels are provided by the caller through getLabel(). * * Example: * * getBulkStructureExample( * 'phase', * getLabel, * ) * * can output: * * Phase * Milestone * Activity * Task * * The modal can then transform that into: * * Phase 1 * Milestone 1 * Activity 1 * Task 1 * ... */ export declare function getBulkStructureExample(rootType: BulkStructureRoot, getLabel: (type: BulkStructureEntityType) => string): string;