Core/Data/BaseStyleProfile.psd1

# src/Data/BaseStyleProfile.psd1

<#
.SYNOPSIS
    Defines the structural symbols and UI strings used by Show-Tree.
 
.DESCRIPTION
    This profile contains the core definitions for tree connectors (Unicode and ASCII),
    ANSI escape sequences, and localized UI string keys. It serves as the foundation
    that other profiles extend.
#>

@{
    #
    # Connectors and Gaps
    #
    # Symbols are mapped by Mode and Encoding (Unicode/Ascii)
    #
    Connectors = @{
        Normal = @{
            Unicode = @{
                File          = '╟── '
                FileLast      = '╙── '
                Directory     = '╠══ '
                DirectoryLast = '╚══ '
                Prefix        = '║ '
                PrefixLast    = ' '
                Gap           = '║'
                NoSpan        = ' '
            }
            Ascii = @{
                File          = '+-- '
                FileLast      = '\-- '
                Directory     = '+== '
                DirectoryLast = '\== '
                Prefix        = '| '
                PrefixLast    = ' '
                Gap           = '|'
                NoSpan        = ' '
            }
        }
        Tree = @{
            Unicode = @{
                File          = '│ '
                FileLast      = '│ '
                Directory     = '├───'
                DirectoryLast = '└───'
                Prefix        = '│ '
                PrefixLast    = ' '
                Gap           = '│'
                NoSpan        = ' '
            }
            Ascii = @{
                File          = '| '
                FileLast      = '| '
                Directory     = '+---'
                DirectoryLast = '\---'
                Prefix        = '| '
                PrefixLast    = ' '
                Gap           = '|'
                NoSpan        = ' '
            }
        }
        List = @{
            Unicode = @{
                File          = ' '
                FileLast      = ' '
                Directory     = ' '
                DirectoryLast = ' '
                Prefix        = ' '
                PrefixLast    = ' '
                Gap           = ' '
                NoSpan        = ' '
            }
            Ascii = @{
                File          = ' '
                FileLast      = ' '
                Directory     = ' '
                DirectoryLast = ' '
                Prefix        = ' '
                PrefixLast    = ' '
                Gap           = ' '
                NoSpan        = ' '
            }
        }
    }

    # Base escape character
    Esc = [char]27

    # Standard sequences
    Reset = "$([char]27)[0m"
    Dim   = "$([char]27)[90m"

    #
    # UI Strings
    #
    UIStrings = @{
        Legend = @{
            Header                  = 'Legend'
            HeaderUnderline         = '------'
            Types                   = 'Types:'
            States                  = ' States:'
            File                    = 'File'
            Directory               = 'Directory'
        }
        TreeMode = @{
            InvalidDrive            = 'Invalid drive specification'
            VolumeListing           = 'Folder PATH listing for volume {0}'
            VolumeSerial            = 'Volume serial number is {0}'
            InvalidPath             = 'Invalid path - {0}'
            NoSubfolders            = 'No subfolders exist'
        }
        Errors = @{
            WindowsOnly             = "Mode 'Tree' is only supported on Windows."
            ColorMonoConflict       = 'Cannot specify both -Color and -Mono.'
            FilesConflict           = 'Cannot specify both -Files (or -ShowFiles) and -NoFiles.'
            HiddenConflict          = 'Cannot specify both -ShowHidden and -HideHidden.'
            SystemConflict          = 'Cannot specify both -ShowSystem and -HideSystem.'
            TargetsConflict         = 'Cannot specify both -ShowTargets and -NoTargets.'
            GapConflict             = 'Cannot specify both -Gap and -NoGap.'
            CompatRequiresTree      = "The -Compat switch can only be used with -Mode Tree."
            PlatformRequiresLegend  = 'The -Platform parameter is only valid with -Legend or -LegendAll.'
            InvalidFormatInput      = "Format-Tree expects ShowTree.TreeRecord input."
            MissingMetadata         = "Tree record '{0}' is missing ShowTree.TreeLayout metadata."
            MissingGapMetadata      = "Gap record is missing ShowTree.TreeLayout metadata."
            Win32WindowsOnly        = "Win32 tree child provider is only supported on Windows."
            MissingGetChildren      = "Tree child provider '{0}' does not define a GetChildren scriptblock."
            MissingTreeItem         = "Tree record type 'Item' requires a TreeItem."
            MissingTreeLayout       = "Tree record requires a ShowTree.TreeLayout layout object."
            PathNotFound            = "Cannot find path '{0}' because it does not exist."
        }
    }

    StylePriority = @(
    # No-op / structural
        'Normal'
        'Directory'
        'Archive'

    # Low-signal metadata
        'NotContentIndexed'
        'Temporary'
        'SparseFile'
        'ReadOnly'
        'Hidden'

    # Storage / availability / integrity
        'Compressed'
        'Encrypted'
        'IntegrityStream'
        'NoScrubData'
        'Offline'

    # Special filesystem object kinds
        'Device'
        'BlockDevice'
        'CharacterDevice'
        'Pipe'
        'Socket'

    # Link / reparse semantics
        'ReparsePoint'
        'Junction'
        'Symlink'

    # Permission / executable semantics
        'Executable'
        'OtherWritable'
        'Sticky'
        'SetGid'
        'SetUid'
        'StickyOtherWritable'

    # Protected/system semantics
        'System'

    # Error states
        'BrokenLink'
    )
}