mirror of
https://github.com/ratatui-org/ratatui
synced 2024-11-10 07:04:17 +00:00
540fd2df03
This PR makes a number of simplifications to the layout and constraint features that were added after v0.25.0. For users upgrading from v0.25.0, the net effect of this PR (along with the other PRs) is the following: - New `Flex` modes have been added. - `Flex::Start` (new default) - `Flex::Center` - `Flex::End` - `Flex::SpaceAround` - `Flex::SpaceBetween` - `Flex::Legacy` (old default) - `Min(v)` grows to allocate excess space in all `Flex` modes instead of shrinking (except in `Flex::Legacy` where it retains old behavior). - `Fill(1)` grows to allocate excess space, growing equally with `Min(v)`. --- The following contains a summary of the changes in this PR and the motivation behind them. **`Flex`** - Removes `Flex::Stretch` - Renames `Flex::StretchLast` to `Flex::Legacy` **`Constraint`** - Removes `Fixed` - Makes `Min(v)` grow as much as possible everywhere (except `Flex::Legacy` where it retains the old behavior) - Makes `Min(v)` grow equally as `Fill(1)` while respecting `Min` lower bounds. When `Fill` and `Min` are used together, they both fill excess space equally. Allowing `Min(v)` to grow still allows users to build the same layouts as before with `Flex::Start` with no breaking changes to the behavior. This PR also removes the unstable feature `SegmentSize`. This is a breaking change to the behavior of constraints. If users want old behavior, they can use `Flex::Legacy`. ```rust Layout::vertical([Length(25), Length(25)]).flex(Flex::Legacy) ``` Users that have constraint that exceed the available space will probably not see any difference or see an improvement in their layouts. Any layout with `Min` will be identical in `Flex::Start` and `Flex::Legacy` so any layout with `Min` will not be breaking. Previously, `Table` used `EvenDistribution` internally by default, but with that gone the default is now `Flex::Start`. This changes the behavior of `Table` (for the better in most cases). The only way for users to get exactly the same as the old behavior is to change their constraints. I imagine most users will be happier out of the box with the new Table default. Resolves https://github.com/ratatui-org/ratatui/issues/843 Thanks to @joshka for the direction
285 lines
7 KiB
TOML
285 lines
7 KiB
TOML
[package]
|
|
name = "ratatui"
|
|
version = "0.25.0" # crate version
|
|
authors = ["Florian Dehau <work@fdehau.com>", "The Ratatui Developers"]
|
|
description = "A library that's all about cooking up terminal user interfaces"
|
|
documentation = "https://docs.rs/ratatui/latest/ratatui/"
|
|
keywords = ["tui", "terminal", "dashboard"]
|
|
repository = "https://github.com/ratatui-org/ratatui"
|
|
readme = "README.md"
|
|
license = "MIT"
|
|
exclude = [
|
|
"assets/*",
|
|
".github",
|
|
"Makefile.toml",
|
|
"CONTRIBUTING.md",
|
|
"*.log",
|
|
"tags",
|
|
]
|
|
autoexamples = true
|
|
edition = "2021"
|
|
rust-version = "1.70.0"
|
|
|
|
[badges]
|
|
|
|
[dependencies]
|
|
crossterm = { version = "0.27", optional = true }
|
|
termion = { version = "3.0", optional = true }
|
|
termwiz = { version = "0.20.0", optional = true }
|
|
|
|
serde = { version = "1", optional = true, features = ["derive"] }
|
|
bitflags = "2.3"
|
|
cassowary = "0.3"
|
|
indoc = "2.0"
|
|
itertools = "0.12"
|
|
paste = "1.0.2"
|
|
strum = { version = "0.25", features = ["derive"] }
|
|
time = { version = "0.3.11", optional = true, features = ["local-offset"] }
|
|
unicode-segmentation = "1.10"
|
|
unicode-width = "0.1"
|
|
document-features = { version = "0.2.7", optional = true }
|
|
lru = "0.12.0"
|
|
stability = "0.1.1"
|
|
compact_str = "0.7.1"
|
|
|
|
[dev-dependencies]
|
|
anyhow = "1.0.71"
|
|
argh = "0.1.12"
|
|
better-panic = "0.3.0"
|
|
cargo-husky = { version = "1.5.0", default-features = false, features = [
|
|
"user-hooks",
|
|
] }
|
|
color-eyre = "0.6.2"
|
|
criterion = { version = "0.5.1", features = ["html_reports"] }
|
|
derive_builder = "0.12.0"
|
|
fakeit = "1.1"
|
|
font8x8 = "0.3.1"
|
|
palette = "0.7.3"
|
|
pretty_assertions = "1.4.0"
|
|
rand = "0.8.5"
|
|
rand_chacha = "0.3.1"
|
|
rstest = "0.18.2"
|
|
serde_json = "1.0.109"
|
|
|
|
[features]
|
|
#! The crate provides a set of optional features that can be enabled in your `cargo.toml` file.
|
|
#!
|
|
## By default, we enable the crossterm backend as this is a reasonable choice for most applications
|
|
## as it is supported on Linux/Mac/Windows systems. We also enable the `underline-color` feature
|
|
## which allows you to set the underline color of text.
|
|
default = ["crossterm", "underline-color"]
|
|
#! Generally an application will only use one backend, so you should only enable one of the following features:
|
|
## enables the [`CrosstermBackend`] backend and adds a dependency on the [Crossterm crate].
|
|
crossterm = ["dep:crossterm"]
|
|
## enables the [`TermionBackend`] backend and adds a dependency on the [Termion crate].
|
|
termion = ["dep:termion"]
|
|
## enables the [`TermwizBackend`] backend and adds a dependency on the [Termwiz crate].
|
|
termwiz = ["dep:termwiz"]
|
|
|
|
#! The following optional features are available for all backends:
|
|
## enables serialization and deserialization of style and color types using the [Serde crate].
|
|
## This is useful if you want to save themes to a file.
|
|
serde = ["dep:serde", "bitflags/serde", "compact_str/serde"]
|
|
|
|
## enables the [`border!`] macro.
|
|
macros = []
|
|
|
|
## enables all widgets.
|
|
all-widgets = ["widget-calendar"]
|
|
|
|
#! Widgets that add dependencies are gated behind feature flags to prevent unused transitive
|
|
#! dependencies. The available features are:
|
|
## enables the [`calendar`] widget module and adds a dependency on the [Time crate].
|
|
widget-calendar = ["dep:time"]
|
|
|
|
#! Underline color is only supported by the [`CrosstermBackend`] backend, and is not supported
|
|
#! on Windows 7.
|
|
## enables the backend code that sets the underline color.
|
|
underline-color = ["dep:crossterm"]
|
|
|
|
#! The following features are unstable and may change in the future:
|
|
|
|
## Enable all unstable features.
|
|
unstable = ["unstable-rendered-line-info"]
|
|
|
|
## Enables the [`Paragraph::line_count`](crate::widgets::Paragraph::line_count)
|
|
## [`Paragraph::line_width`](crate::widgets::Paragraph::line_width) methods
|
|
## which are experimental and may change in the future.
|
|
## See [Issue 293](https://github.com/ratatui-org/ratatui/issues/293) for more details.
|
|
unstable-rendered-line-info = []
|
|
|
|
[package.metadata.docs.rs]
|
|
all-features = true
|
|
# see https://doc.rust-lang.org/nightly/rustdoc/scraped-examples.html
|
|
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
|
|
rustdoc-args = ["--cfg", "docsrs"]
|
|
|
|
[[bench]]
|
|
name = "barchart"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "block"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "list"
|
|
harness = false
|
|
|
|
[lib]
|
|
bench = false
|
|
|
|
[[bench]]
|
|
name = "paragraph"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "sparkline"
|
|
harness = false
|
|
|
|
|
|
[[example]]
|
|
name = "barchart"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "block"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "canvas"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "calendar"
|
|
required-features = ["crossterm", "widget-calendar"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "chart"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "colors"
|
|
required-features = ["crossterm"]
|
|
# this example is a bit verbose, so we don't want to include it in the docs
|
|
doc-scrape-examples = false
|
|
|
|
[[example]]
|
|
name = "colors_rgb"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "custom_widget"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "demo"
|
|
# this runs for all of the terminal backends, so it can't be built using --all-features or scraped
|
|
doc-scrape-examples = false
|
|
|
|
[[example]]
|
|
name = "demo2"
|
|
required-features = ["crossterm", "widget-calendar"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "docsrs"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = false
|
|
|
|
[[example]]
|
|
name = "gauge"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "hello_world"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "layout"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "constraints"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = false
|
|
|
|
[[example]]
|
|
name = "flex"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "list"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "modifiers"
|
|
required-features = ["crossterm"]
|
|
# this example is a bit verbose, so we don't want to include it in the docs
|
|
doc-scrape-examples = false
|
|
|
|
[[example]]
|
|
name = "panic"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "paragraph"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "popup"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "ratatui-logo"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "scrollbar"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "sparkline"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "table"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "tabs"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "user_input"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[example]]
|
|
name = "inline"
|
|
required-features = ["crossterm"]
|
|
doc-scrape-examples = true
|
|
|
|
[[test]]
|
|
name = "state_serde"
|
|
required-features = ["serde"]
|