Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request: support TextBox and RenderableText in @nested_panels #241

Open
nathanrboyer opened this issue Feb 15, 2024 · 2 comments
Open

Request: support TextBox and RenderableText in @nested_panels #241

nathanrboyer opened this issue Feb 15, 2024 · 2 comments

Comments

@nathanrboyer
Copy link
Contributor

@nested_panel works well with panels:

julia> using Faker, Term

julia> panel = @nested_panels Panel(
           Panel(
               @red(Faker.text()),
               style="red",
           ),
           Panel(
               @green(Faker.text()),
               style="green",
           ),
           style = "cyan",
           justify = :center
       )
╭────────────────────────────────────────────────────────────────────────────────────────╮
│  ╭──────────────────────────────────────────────────────────────────────────────────╮  │
│  │  Voluptates ipsum et consequatur est. Iste quaerat ea est. Ducimus qui quisqua   │  │
│  │  m. Numquam. In animi. Qui. Fugiat quia necessitatibus mollitia sed aut.         │  │
│  │  Ex voluptatem. Vel quo perferendis autem. Vel placeat voluptate omnis.          │  │
│  ╰──────────────────────────────────────────────────────────────────────────────────╯  │
│  ╭──────────────────────────────────────────────────────────────────────────────────╮  │
│  │  Ut accusamus voluptatem maxime. Dolor debitis dolores dignissimos dolorum       │  │
│  │  praesentium. Omnis. Omnis ea commodi rerum distinctio voluptas. Maiores         │  │
│  │  dolore nostrum qui voluptas modi. Iusto. Pariatur nobis quas.                   │  │
│  ╰──────────────────────────────────────────────────────────────────────────────────╯  │
╰────────────────────────────────────────────────────────────────────────────────────────╯

But it does not work well with other text renderables:

julia> panel = @nested_panels Panel(
           Panel(
               @red(Faker.text()),
               style="red",
           ),
           TextBox(
               @green(Faker.text()),
               style="green",
           ),
           style = "cyan",
           justify = :center
       )
╭────────────────────────────────────────────────────────────────────────────────────────╮
│  ╭──────────────────────────────────────────────────────────────────────────────────   │
│                                           ╮                                            │
│      │  Nam. Expedita ut quae debitis laboriosam. Aut modi eos nihil nulla omnis.      │
│                                              │                                         │
│       │  Et tenetur. Nostrum laborum ut ut. Aliquam sequi asperiores eum. Itaque       │
│                                              │                                         │
│         │  et quia totam veritatis. Repellat tempora. Aspernatur. Architecto.          │
│                                              │                                         │
│  ╰──────────────────────────────────────────────────────────────────────────────────   │
│                                           ╯                                            │
│                                                                                        │
│                                                                                        │
│      Temporibus voluptatem et. Vitae aliquam iste voluptatem eos. Eligendi sapiente    │
│                                                                                        │
│      recusandae architecto illo. Quae id officia at culpa ut. Qui nesciunt. Laborum    │
│                                                                                        │
│               aliquam in explicabo quibusdam eos. Nostrum aperiam ad neque.            │
│                                                                                        │
│                                                                                        │
│                                                                                        │
╰────────────────────────────────────────────────────────────────────────────────────────╯
julia> panel = @nested_panels Panel(
           Panel(
               @red(Faker.text()),
               style="red",
           ),
           RenderableText(
               @green(Faker.text()),
               style="green",
           ),
           style = "cyan",
       )
╭────────────────────────────────────────────────────────────────────────────────────────╮
│  ╭──────────────────────────────────────────────────────────────────────────────────   │
│  ╮                                                                                     │
│  │  Nostrum et saepe eveniet. Distinctio aut recusandae sed vero velit. In sint        │
│      │                                                                                 │
│  │  voluptas perferendis qui enim. Unde ducimus blanditiis natus. Harum. Quisquam      │
│    │                                                                                   │
│  │   repudiandae commodi. Consequatur voluptatem quam. Cupiditate.                     │
│       │                                                                                │
│  ╰──────────────────────────────────────────────────────────────────────────────────   │
│  ╯                                                                                     │
│  Aut. Tempore. Quia veritatis distinctio. Doloremque quos voluptatem illo. Delectus    │
│  sit                                                                                   │
│  veritatis consequatur nesciunt. Eum quasi voluptatem quia in. Ut libero dolores       │
│  earum                                                                                 │
│  libero. Sit. Voluptas. Ducimus necessitatibus magnam illum accusamus dolores.         │
│                                                                                        │
╰────────────────────────────────────────────────────────────────────────────────────────╯
@nathanrboyer
Copy link
Contributor Author

My use case is to add footnotes to a table:

julia> ASME_Materials.tableKM620_options()
╭──── Table KM-620 Material Categories ───────────────────────────────────╮
│  ╭────────────┬──────────────────────────────────────────────────────╮  │
│  │  Category  │ Material                                             │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     1      │ Ferritic steel                                       │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     2      │ Austenitic stainless steel and nickel-based alloys   │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     3      │ Duplex stainless steel                               │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     4      │ Precipitation hardening, nickel based                │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     5      │ Aluminum                                             │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     6      │ Copper                                               │  │
│  ├────────────┼──────────────────────────────────────────────────────┤  │
│  │     7      │ Titanium and zirconium                               │  │
│  ╰────────────┴──────────────────────────────────────────────────────╯  │
│  ╭──── Note: ────────────────────────────────────────────────────────╮  │
│  │  (1) Ferritic steel includes carbon, low alloy, and alloy         │  │
│  │  steels, and ferritic, martensitic, and iron-based age-hardenin   │  │
│  │  g stainless steels.                                              │  │
│  ╰───────────────────────────────────────────────────────────────────╯  │
╰─────────────────────────────────────────────────────────────────────────╯
function tableKM620_options()
    table = select(KM620.coefficients_table, "Material")
    notes = join(values(metadata(KM620.coefficients_table)), "\n")
    panel = @nested_panels Panel(
        Term.Table(
            hcat(1:nrow(table), table."Material"),
            header = ["Category", "Material"],
            header_style = "cyan",
            columns_justify = [:center, :left],
            columns_style = "default",
            box = :ROUNDED,
            style = "cyan",
        ),
        Panel(
            @style(notes, "cyan dim"),
            style = "cyan dim",
            title = "Note:",
            title_style = "cyan dim",
        ),
        title = "Table KM-620 Material Categories",
        title_style = "cyan",
        style = "cyan",
    )
    return panel
end

I cannot get it to look nice without the Panel:

julia> ASME_Materials.tableKM620_options2()
╭──── Table KM-620 Material Categories ───────────────────────────────────╮
│  ╭────────────┬──────────────────────────────────────────────────────   │
│  ╮                                                                      │
│  │  Category  │ Material                                                │
│       │                                                                 │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     1      │ Ferritic steel                                          │
│       │                                                                 │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     2      │ Austenitic stainless steel and nickel-based alloys      │
│    │                                                                    │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     3      │ Duplex stainless steel                                  │
│       │                                                                 │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     4      │ Precipitation hardening, nickel based                   │
│       │                                                                 │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     5      │ Aluminum                                                │
│       │                                                                 │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     6      │ Copper                                                  │
│       │                                                                 │
│  ├────────────┼──────────────────────────────────────────────────────   │
│  ┤                                                                      │
│  │     7      │ Titanium and zirconium                                  │
│       │                                                                 │
│  ╰────────────┴──────────────────────────────────────────────────────   │
│  ╯                                                                      │
│                                                                         │
│                                                                         │
│     Notes:                                                              │
│                                                                         │
│     (1) Ferritic steel includes carbon, low alloy, and alloy steels,    │
│                                                                         │
│     and ferritic, martensitic, and iron-based age-hardening stainless   │
│                                                                         │
│     steels.                                                             │
│                                                                         │
│                                                                         │
│                                                                         │
╰─────────────────────────────────────────────────────────────────────────╯
function tableKM620_options2()
    table = select(KM620.coefficients_table, "Material")
    notes = "Notes:\n" * join(values(metadata(KM620.coefficients_table)), "\n")
    panel = @nested_panels Panel(
        Term.Table(
            hcat(1:nrow(table), table."Material"),
            header = ["Category", "Material"],
            header_style = "cyan",
            columns_justify = [:center, :left],
            columns_style = "default",
            box = :ROUNDED,
            style = "cyan",
        ),
        TextBox(
            @style(notes, "cyan dim"),
        ),
        title = "Table KM-620 Material Categories",
        title_style = "cyan",
        style = "cyan",
    )
    return panel
end

(Also in the last example, the styling is only applied to the first line of the TextBox.)

@FedeClaudi
Copy link
Owner

FedeClaudi commented Feb 15, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants