
    Ki"                         d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 er ddl
mZmZmZ ddlmZ ddlmZ ddlmZmZmZ  ed	
       G d d             Zy)z"Default Rich-based help formatter.    )TYPE_CHECKINGAnyOptionalUnion)define)SILENT)ConsoleConsoleOptionsRenderableType)	HelpPanel)ColumnSpecBuilder)
ColumnSpec	PanelSpec	TableSpecT)kw_onlyc                       e Zd ZU dZdZed   ed<   	 dZed   ed<   	 dZe	e
d   df   dz  ed	<   	 ed
        ZddZdddddeddfdZdddddeddfdZddZy)DefaultFormatteru  Default help formatter using Rich library with customizable specs.

    Parameters
    ----------
    panel_spec : Optional[PanelSpec]
        Panel specification for the outer box/panel styling.
    table_spec : Optional[TableSpec]
        Table specification for table styling (borders, padding, etc).
    column_specs : Optional[Union[tuple[ColumnSpec, ...], ColumnSpecBuilder]]
        Column specifications or builder function for table columns.

    Notes
    -----
    The relationship between these specs can be visualized as:

    ::

        ╭─ Commands ───────────────────────────────────────────────────────╮  ← panel_spec
        │ serve     Start the development server                           │     (border, title)
        │ --help    Display this message and exit.                         │
        ╰──────────────────────────────────────────────────────────────────╯
         ↑         ↑
         col[0]    col[1]
         (name)    (description)

        ╭─ Parameters ─────────────────────────────────────────────────────╮  ← panel_spec
        │ *  PORT --port        Server port number [required]              │
        │    VERBOSE --verbose  Enable verbose output [default: False]     │
        ╰──────────────────────────────────────────────────────────────────╯
         ↑  ↑                  ↑
         │  col[1]             col[2]
         │  (name/flags)       (description)
         │
         col[0]
         (required marker)

    Where:

    - ``panel_spec`` controls the outer panel appearance (border, title, etc.)
    - ``table_spec`` controls the inner table styling (no visible borders by default)
    - ``column_specs`` defines individual columns (width, style, alignment, etc.)
    Nr   
panel_specr   
table_spec)r   .r   column_specsc                     d } | dd|i|S )a  Create formatter with metadata on separate lines.

        Returns a DefaultFormatter configured to display parameter metadata
        (choices, env vars, defaults) on separate indented lines rather
        than inline with descriptions.

        Parameters
        ----------
        **kwargs
            Additional keyword arguments to pass to DefaultFormatter constructor.

        Returns
        -------
        DefaultFormatter
            Configured formatter instance with newline metadata display.

        Examples
        --------
        >>> from cyclopts import App
        >>> from cyclopts.help import DefaultFormatter
        >>> app = App(help_formatter=DefaultFormatter.with_newline_metadata())
        c                     dd l }ddlm}m}m}m} |j                  | j                  dz        } | ||      dd|      }	 | |d	      d
d      }
t        d |D              r||	|
fS |	|
fS )Nr   )AsteriskColumnr   DescriptionRendererNameRenderergffffff?)	max_widthOptioncyan)rendererheaderstyler   T)newline_metadataDescriptionfold)r   r    overflowc              3   4   K   | ]  }|j                     y w)N)required).0xs     l/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/cyclopts/help/formatters/default.py	<genexpr>zQDefaultFormatter.with_newline_metadata.<locals>.column_builder.<locals>.<genexpr>v   s     /!1::/s   )	mathcyclopts.help.specsr   r   r   r   ceilwidthany)consoleoptionsentriesr,   r   r   r   r   r   name_columndescription_columns              r*   column_builderz>DefaultFormatter.with_newline_metadata.<locals>.column_builder`   s      		'--$"67I$%	:#	K ",,dCMdj" /w//&5GHH!344    r    r8   )clskwargsr6   s      r*   with_newline_metadataz&DefaultFormatter.with_newline_metadataG   s    2	54 99&99r7   r1   r	   r2   r
   returnc                 L    | j                  |||      }|j                  |       y)a=  Format and render a single help panel using Rich.

        Parameters
        ----------
        console : ~rich.console.Console
            Console to render to.
        options : ~rich.console.ConsoleOptions
            Console rendering options.
        panel : HelpPanel
            Help panel to render.
        N)_render_panelprint)selfr1   r2   panelrendereds        r*   __call__zDefaultFormatter.__call__|   s$     %%eWg>hr7   usagec                    |rddl m} t        |      }|j                         j	                  d      s(t        ||      r |dd      |z   }n/ |d| d      }n!t        ||      r|n |t        |      d      }|j                  |       yy)a$  Render the usage line.

        Parameters
        ----------
        console : ~rich.console.Console
            Console to render to.
        options : ~rich.console.ConsoleOptions
            Console rendering options.
        usage : Any
            The usage line (Text or str).
        r   TextzUsage:zUsage: bold)r!   N)	rich.textrG   strstrip
startswith
isinstancer?   )r@   r1   r2   rD   rG   	usage_strusage_with_labels          r*   render_usagezDefaultFormatter.render_usage   s     & E
I??$//9eT*'+IV'Du'L$'+geW,=V'L$ -7ud,C5cRWj`fIg MM*+ r7   descriptionc                 ,    |r|j                  |       yy)a@  Render the description.

        Parameters
        ----------
        console : ~rich.console.Console
            Console to render to.
        options : ~rich.console.ConsoleOptions
            Console rendering options.
        description : Any
            The description (can be various Rich renderables).
        N)r?   )r@   r1   r2   rQ   s       r*   render_descriptionz#DefaultFormatter.render_description   s     MM+& r7   c                    |j                   st        S ddlm} ddlm} ddlm} ddlm}m	}m
}	m}
 |j                  }t        ||      r"d|_        |j                  r || |d            }| j                   xs  |       }| j"                  xs  |       }| j$                  }||j&                  dk(  r|	}n|
}t)        |      r ||||j                         }|j+                  ||j                         }|J |j,                  &|j+                   |||      |j,                  	      }|S |j+                   |||            }|S )
zRender a single help panel.r   )Group)NewLinerF   )r   r   get_default_command_columnsget_default_parameter_columns    command)title)r3   r   rich.consolerU   rV   rI   rG   r-   r   r   rW   rX   rQ   rM   endplainr   r   r   formatcallablebuildr\   )r@   
help_panelr1   r2   	RichGrouprV   rG   r   r   rW   rX   panel_descriptionr   r   columnstablerA   s                    r*   r>   zDefaultFormatter._render_panel   sF   !!M3("	
 	
 '22'.$&! &&$-.?$L! __3	
__3	
 ##?  I-57Ggw
0B0BCG   **<*<= !,,,#$$Y/@%%HPZP`P`$aE  $$Y/@%%HIEr7   )r1   r	   r2   r
   rA   r   r<   N)rc   r   r1   r	   r2   r
   r<   r   )__name__
__module____qualname____doc__r   r   __annotations__r   r   r   tupleclassmethodr;   rC   r   rP   rS   r>   r8   r7   r*   r   r      s    )V )-J%,\(,J%,[PTL%/02EEFMTe2: 2:h ,I ,8H ,QT ,Y] ,6') '>N ']` 'ei '2r7   r   N)rk   typingr   r   r   r   attrsr   cyclopts.help.silentr   r]   r	   r
   r   cyclopts.helpr   cyclopts.help.protocolsr   r-   r   r   r   r   r8   r7   r*   <module>rt      sJ    ( 6 6  'DD'9DD U U Ur7   