summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/rich/panel.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/rich/panel.py')
-rw-r--r--venv/lib/python3.11/site-packages/rich/panel.py312
1 files changed, 0 insertions, 312 deletions
diff --git a/venv/lib/python3.11/site-packages/rich/panel.py b/venv/lib/python3.11/site-packages/rich/panel.py
deleted file mode 100644
index 95f4c84..0000000
--- a/venv/lib/python3.11/site-packages/rich/panel.py
+++ /dev/null
@@ -1,312 +0,0 @@
-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)