o
    iq                      @   s   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	d
G dd dZdS )z"Default Rich-based help formatter.    )TYPE_CHECKINGAnyOptionalUnion)define)SILENT)ConsoleConsoleOptionsRenderableType)	HelpPanel)ColumnSpecBuilder)
ColumnSpec	PanelSpec	TableSpecT)kw_onlyc                   @   s   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B ed	< 	 ed
d ZdddZdddddeddfddZdddddeddfddZd ddZdS )!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                 K   s   d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                 S   s~   dd l }ddlm}m}m}m} || jd }|||ddd|d}	||dd	d
dd}
td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                 s   s    | ]}|j V  qd S )N)required).0x r%   f/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/help/formatters/default.py	<genexpr>v   s    zQDefaultFormatter.with_newline_metadata.<locals>.column_builder.<locals>.<genexpr>)	mathcyclopts.help.specsr   r   r   r   ceilwidthany)consoleoptionsentriesr(   r   r   r   r   r   name_columndescription_columnr%   r%   r&   column_builder`   s   
z>DefaultFormatter.with_newline_metadata.<locals>.column_builderr   Nr%   r%   )clskwargsr2   r%   r%   r&   with_newline_metadataG   s   z&DefaultFormatter.with_newline_metadatar-   r   r.   r	   panelr   returnc                 C   s   |  |||}|| dS )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)selfr-   r.   r6   renderedr%   r%   r&   __call__|   s   zDefaultFormatter.__call__usagec                 C      |r	| | dS dS )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).
        Nr9   )r:   r-   r.   r=   r%   r%   r&   render_usage      zDefaultFormatter.render_usagedescriptionc                 C   r>   )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).
        Nr?   )r:   r-   r.   rB   r%   r%   r&   render_description   rA   z#DefaultFormatter.render_description
help_panelr
   c                 C   s  |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||r8d|_|jr8|||d}| jp=| }| jpC| }| j}|du rU|jd	krS|	}n|
}t|r`||||j }|||j }|dusmJ |jdu r|j||||jd
}|S ||||}|S )zRender a single help panel.r   )Group)NewLine)Text)r   r   get_default_command_columnsget_default_parameter_columns    Ncommand)title)r/   r   rich.consolerE   rF   	rich.textrG   r)   r   r   rH   rI   rB   
isinstanceendplainr   r   r   formatcallablebuildrM   )r:   rD   r-   r.   	RichGrouprF   rG   r   r   rH   rI   panel_descriptionr   r   columnstabler6   r%   r%   r&   r8      s6   


zDefaultFormatter._render_panel)r-   r   r.   r	   r6   r   r7   N)rD   r   r-   r   r.   r	   r7   r
   )__name__
__module____qualname____doc__r   r   __annotations__r   r   r   tupleclassmethodr5   r<   r   r@   rC   r8   r%   r%   r%   r&   r      s   
 +

4r   N)r]   typingr   r   r   r   attrsr   cyclopts.help.silentr   rN   r   r	   r
   cyclopts.helpr   cyclopts.help.protocolsr   r)   r   r   r   r   r%   r%   r%   r&   <module>   s    