$91 GRAYBYTE WORDPRESS FILE MANAGER $55

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 147.79.69.92 | ADMIN IP 216.73.216.215
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/alt/python311/lib/python3.11/site-packages/rich/

HOME
Current File : /opt/alt/python311/lib/python3.11/site-packages/rich//panel.py
from typing import TYPE_CHECKING, Optional

from .align import AlignMethod
from .box import ROUNDED, Box
from .cells import cell_len
from .jupyter import JupyterMixin
from .measure import Measurement, measure_renderables
from .padding import Padding, PaddingDimensions
from .segment import Segment
from .style import Style, StyleType
from .text import Text, TextType

if TYPE_CHECKING:
    from .console import Console, ConsoleOptions, RenderableType, RenderResult


class Panel(JupyterMixin):
    """A console renderable that draws a border around its contents.

    Example:
        >>> console.print(Panel("Hello, World!"))

    Args:
        renderable (RenderableType): A console renderable object.
        box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`.
            Defaults to box.ROUNDED.
        safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
        expand (bool, optional): If True the panel will stretch to fill the console
            width, otherwise it will be sized to fit the contents. Defaults to True.
        style (str, optional): The style of the panel (border and contents). Defaults to "none".
        border_style (str, optional): The style of the border. Defaults to "none".
        width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect.
        height (Optional[int], optional): Optional height of panel. Defaults to None to auto-detect.
        padding (Optional[PaddingDimensions]): Optional padding around renderable. Defaults to 0.
        highlight (bool, optional): Enable automatic highlighting of panel title (if str). Defaults to False.
    """

    def __init__(
        self,
        renderable: "RenderableType",
        box: Box = ROUNDED,
        *,
        title: Optional[TextType] = None,
        title_align: AlignMethod = "center",
        subtitle: Optional[TextType] = None,
        subtitle_align: AlignMethod = "center",
        safe_box: Optional[bool] = None,
        expand: bool = True,
        style: StyleType = "none",
        border_style: StyleType = "none",
        width: Optional[int] = None,
        height: Optional[int] = None,
        padding: PaddingDimensions = (0, 1),
        highlight: bool = False,
    ) -> None:
        self.renderable = renderable
        self.box = box
        self.title = title
        self.title_align: AlignMethod = title_align
        self.subtitle = subtitle
        self.subtitle_align = subtitle_align
        self.safe_box = safe_box
        self.expand = expand
        self.style = style
        self.border_style = border_style
        self.width = width
        self.height = height
        self.padding = padding
        self.highlight = highlight

    @classmethod
    def fit(
        cls,
        renderable: "RenderableType",
        box: Box = ROUNDED,
        *,
        title: Optional[TextType] = None,
        title_align: AlignMethod = "center",
        subtitle: Optional[TextType] = None,
        subtitle_align: AlignMethod = "center",
        safe_box: Optional[bool] = None,
        style: StyleType = "none",
        border_style: StyleType = "none",
        width: Optional[int] = None,
        height: Optional[int] = None,
        padding: PaddingDimensions = (0, 1),
        highlight: bool = False,
    ) -> "Panel":
        """An alternative constructor that sets expand=False."""
        return cls(
            renderable,
            box,
            title=title,
            title_align=title_align,
            subtitle=subtitle,
            subtitle_align=subtitle_align,
            safe_box=safe_box,
            style=style,
            border_style=border_style,
            width=width,
            height=height,
            padding=padding,
            highlight=highlight,
            expand=False,
        )

    @property
    def _title(self) -> Optional[Text]:
        if self.title:
            title_text = (
                Text.from_markup(self.title)
                if isinstance(self.title, str)
                else self.title.copy()
            )
            title_text.end = ""
            title_text.plain = title_text.plain.replace("\n", " ")
            title_text.no_wrap = True
            title_text.expand_tabs()
            title_text.pad(1)
            return title_text
        return None

    @property
    def _subtitle(self) -> Optional[Text]:
        if self.subtitle:
            subtitle_text = (
                Text.from_markup(self.subtitle)
                if isinstance(self.subtitle, str)
                else self.subtitle.copy()
            )
            subtitle_text.end = ""
            subtitle_text.plain = subtitle_text.plain.replace("\n", " ")
            subtitle_text.no_wrap = True
            subtitle_text.expand_tabs()
            subtitle_text.pad(1)
            return subtitle_text
        return None

    def __rich_console__(
        self, console: "Console", options: "ConsoleOptions"
    ) -> "RenderResult":
        _padding = Padding.unpack(self.padding)
        renderable = (
            Padding(self.renderable, _padding) if any(_padding) else self.renderable
        )
        style = console.get_style(self.style)
        border_style = style + console.get_style(self.border_style)
        width = (
            options.max_width
            if self.width is None
            else min(options.max_width, self.width)
        )

        safe_box: bool = console.safe_box if self.safe_box is None else self.safe_box
        box = self.box.substitute(options, safe=safe_box)

        def align_text(
            text: Text, width: int, align: str, character: str, style: Style
        ) -> Text:
            """Gets new aligned text.

            Args:
                text (Text): Title or subtitle text.
                width (int): Desired width.
                align (str): Alignment.
                character (str): Character for alignment.
                style (Style): Border style

            Returns:
                Text: New text instance
            """
            text = text.copy()
            text.truncate(width)
            excess_space = width - cell_len(text.plain)
            if excess_space:
                if align == "left":
                    return Text.assemble(
                        text,
                        (character * excess_space, style),
                        no_wrap=True,
                        end="",
                    )
                elif align == "center":
                    left = excess_space // 2
                    return Text.assemble(
                        (character * left, style),
                        text,
                        (character * (excess_space - left), style),
                        no_wrap=True,
                        end="",
                    )
                else:
                    return Text.assemble(
                        (character * excess_space, style),
                        text,
                        no_wrap=True,
                        end="",
                    )
            return text

        title_text = self._title
        if title_text is not None:
            title_text.stylize_before(border_style)

        child_width = (
            width - 2
            if self.expand
            else console.measure(
                renderable, options=options.update_width(width - 2)
            ).maximum
        )
        child_height = self.height or options.height or None
        if child_height:
            child_height -= 2
        if title_text is not None:
            child_width = min(
                options.max_width - 2, max(child_width, title_text.cell_len + 2)
            )

        width = child_width + 2
        child_options = options.update(
            width=child_width, height=child_height, highlight=self.highlight
        )
        lines = console.render_lines(renderable, child_options, style=style)

        line_start = Segment(box.mid_left, border_style)
        line_end = Segment(f"{box.mid_right}", border_style)
        new_line = Segment.line()
        if title_text is None or width <= 4:
            yield Segment(box.get_top([width - 2]), border_style)
        else:
            title_text = align_text(
                title_text,
                width - 4,
                self.title_align,
                box.top,
                border_style,
            )
            yield Segment(box.top_left + box.top, border_style)
            yield from console.render(title_text, child_options.update_width(width - 4))
            yield Segment(box.top + box.top_right, border_style)

        yield new_line
        for line in lines:
            yield line_start
            yield from line
            yield line_end
            yield new_line

        subtitle_text = self._subtitle
        if subtitle_text is not None:
            subtitle_text.stylize_before(border_style)

        if subtitle_text is None or width <= 4:
            yield Segment(box.get_bottom([width - 2]), border_style)
        else:
            subtitle_text = align_text(
                subtitle_text,
                width - 4,
                self.subtitle_align,
                box.bottom,
                border_style,
            )
            yield Segment(box.bottom_left + box.bottom, border_style)
            yield from console.render(
                subtitle_text, child_options.update_width(width - 4)
            )
            yield Segment(box.bottom + box.bottom_right, border_style)

        yield new_line

    def __rich_measure__(
        self, console: "Console", options: "ConsoleOptions"
    ) -> "Measurement":
        _title = self._title
        _, right, _, left = Padding.unpack(self.padding)
        padding = left + right
        renderables = [self.renderable, _title] if _title else [self.renderable]

        if self.width is None:
            width = (
                measure_renderables(
                    console,
                    options.update_width(options.max_width - padding - 2),
                    renderables,
                ).maximum
                + padding
                + 2
            )
        else:
            width = self.width
        return Measurement(width, width)


if __name__ == "__main__":  # pragma: no cover
    from .console import Console

    c = Console()

    from .box import DOUBLE, ROUNDED
    from .padding import Padding

    p = Panel(
        "Hello, World!",
        title="rich.Panel",
        style="white on blue",
        box=DOUBLE,
        padding=1,
    )

    c.print()
    c.print(p)

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
5 Sep 2025 9.32 AM
root / 996
0755
__pycache__
--
8 May 2024 6.33 PM
root / root
0755
__init__.py
5.924 KB
8 May 2024 6.33 PM
root / root
0644
__main__.py
8.138 KB
8 May 2024 6.33 PM
root / root
0644
_cell_widths.py
9.97 KB
8 May 2024 6.33 PM
root / root
0644
_emoji_codes.py
136.948 KB
8 May 2024 6.33 PM
root / root
0644
_emoji_replace.py
1.039 KB
8 May 2024 6.33 PM
root / root
0644
_export_format.py
2.078 KB
8 May 2024 6.33 PM
root / root
0644
_extension.py
0.235 KB
8 May 2024 6.33 PM
root / root
0644
_fileno.py
0.78 KB
8 May 2024 6.33 PM
root / root
0644
_inspect.py
9.468 KB
8 May 2024 6.33 PM
root / root
0644
_log_render.py
3.138 KB
8 May 2024 6.33 PM
root / root
0644
_loop.py
1.207 KB
8 May 2024 6.33 PM
root / root
0644
_null_file.py
1.354 KB
8 May 2024 6.33 PM
root / root
0644
_palettes.py
6.897 KB
8 May 2024 6.33 PM
root / root
0644
_pick.py
0.413 KB
8 May 2024 6.33 PM
root / root
0644
_ratio.py
5.331 KB
8 May 2024 6.33 PM
root / root
0644
_spinners.py
19.452 KB
8 May 2024 6.33 PM
root / root
0644
_stack.py
0.343 KB
8 May 2024 6.33 PM
root / root
0644
_timer.py
0.407 KB
8 May 2024 6.33 PM
root / root
0644
_win32_console.py
22.25 KB
8 May 2024 6.33 PM
root / root
0644
_windows.py
1.856 KB
8 May 2024 6.33 PM
root / root
0644
_windows_renderer.py
2.694 KB
8 May 2024 6.33 PM
root / root
0644
_wrap.py
3.324 KB
8 May 2024 6.33 PM
root / root
0644
abc.py
0.857 KB
8 May 2024 6.33 PM
root / root
0644
align.py
10.078 KB
8 May 2024 6.33 PM
root / root
0644
ansi.py
6.744 KB
8 May 2024 6.33 PM
root / root
0644
bar.py
3.187 KB
8 May 2024 6.33 PM
root / root
0644
box.py
10.53 KB
8 May 2024 6.33 PM
root / root
0644
cells.py
4.668 KB
8 May 2024 6.33 PM
root / root
0644
color.py
17.796 KB
8 May 2024 6.33 PM
root / root
0644
color_triplet.py
1.029 KB
8 May 2024 6.33 PM
root / root
0644
columns.py
6.964 KB
8 May 2024 6.33 PM
root / root
0644
console.py
96.778 KB
8 May 2024 6.33 PM
root / root
0644
constrain.py
1.258 KB
8 May 2024 6.33 PM
root / root
0644
containers.py
5.373 KB
8 May 2024 6.33 PM
root / root
0644
control.py
6.451 KB
8 May 2024 6.33 PM
root / root
0644
default_styles.py
7.857 KB
8 May 2024 6.33 PM
root / root
0644
diagnose.py
0.902 KB
8 May 2024 6.33 PM
root / root
0644
emoji.py
2.407 KB
8 May 2024 6.33 PM
root / root
0644
errors.py
0.627 KB
8 May 2024 6.33 PM
root / root
0644
file_proxy.py
1.644 KB
8 May 2024 6.33 PM
root / root
0644
filesize.py
2.449 KB
8 May 2024 6.33 PM
root / root
0644
highlighter.py
9.36 KB
8 May 2024 6.33 PM
root / root
0644
json.py
4.901 KB
8 May 2024 6.33 PM
root / root
0644
jupyter.py
3.152 KB
8 May 2024 6.33 PM
root / root
0644
layout.py
13.617 KB
8 May 2024 6.33 PM
root / root
0644
live.py
13.937 KB
8 May 2024 6.33 PM
root / root
0644
live_render.py
3.568 KB
8 May 2024 6.33 PM
root / root
0644
logging.py
11.612 KB
8 May 2024 6.33 PM
root / root
0644
markdown.py
25.554 KB
8 May 2024 6.33 PM
root / root
0644
markup.py
8.229 KB
8 May 2024 6.33 PM
root / root
0644
measure.py
5.181 KB
8 May 2024 6.33 PM
root / root
0644
padding.py
4.842 KB
8 May 2024 6.33 PM
root / root
0644
pager.py
0.809 KB
8 May 2024 6.33 PM
root / root
0644
palette.py
3.211 KB
8 May 2024 6.33 PM
root / root
0644
panel.py
10.454 KB
8 May 2024 6.33 PM
root / root
0644
pretty.py
34.973 KB
8 May 2024 6.33 PM
root / root
0644
progress.py
58.304 KB
8 May 2024 6.33 PM
root / root
0644
progress_bar.py
7.973 KB
8 May 2024 6.33 PM
root / root
0644
prompt.py
11.027 KB
8 May 2024 6.33 PM
root / root
0644
protocol.py
1.335 KB
8 May 2024 6.33 PM
root / root
0644
py.typed
0 KB
8 May 2024 6.33 PM
root / root
0644
region.py
0.162 KB
8 May 2024 6.33 PM
root / root
0644
repr.py
4.315 KB
8 May 2024 6.33 PM
root / root
0644
rule.py
4.482 KB
8 May 2024 6.33 PM
root / root
0644
scope.py
2.765 KB
8 May 2024 6.33 PM
root / root
0644
screen.py
1.542 KB
8 May 2024 6.33 PM
root / root
0644
segment.py
23.643 KB
8 May 2024 6.33 PM
root / root
0644
spinner.py
4.237 KB
8 May 2024 6.33 PM
root / root
0644
status.py
4.32 KB
8 May 2024 6.33 PM
root / root
0644
style.py
26.438 KB
8 May 2024 6.33 PM
root / root
0644
styled.py
1.205 KB
8 May 2024 6.33 PM
root / root
0644
syntax.py
34.538 KB
8 May 2024 6.33 PM
root / root
0644
table.py
38.715 KB
8 May 2024 6.33 PM
root / root
0644
terminal_theme.py
3.291 KB
8 May 2024 6.33 PM
root / root
0644
text.py
46.191 KB
8 May 2024 6.33 PM
root / root
0644
theme.py
3.688 KB
8 May 2024 6.33 PM
root / root
0644
themes.py
0.1 KB
8 May 2024 6.33 PM
root / root
0644
traceback.py
28.837 KB
8 May 2024 6.33 PM
root / root
0644
tree.py
8.894 KB
8 May 2024 6.33 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF