Repository: zhiburt/tabled
Pull request #314 (2023-03-21 00:40:28)

Example description revisions
# Addressing #296

I've updated a handful of the examples, and would love some feedback before I proceed with the rest. I'm _attempting_ to keep the descriptions brief while identifying all the major ideas of each example and providing links where appropriate to further contextualize libraries referenced.

# Progress

- [X] csv_to_table
- [X] json_to_table
- [x] papergrid
- [x] static_table
- [x] table_to_html
- [x] tabled
    - [X] derive
- [X] tabled_derive

# Omitted [^1]

 - use_in_docs `static_table`
 - show `tabled`
 - terminal_size `tabled`

# Criticism Welcome 😄 
If you have any preferences whatsoever, please let me know and I will change what we've got so far. Or if you'd rather leave the examples as-is that's good too 👍🏻 

[^1]: tests not `cargo run --example` accessible

zhiburt: It feels like in some cases your description is more expressive then we have, as docs.

> ```rust
> //! * The [`IterTable::sniff()`] formatting function is used to control how many
> //! rows will be considered in determining column widths. Since the default sniff value is 1000,
> //! this is helpful for controlling large dataset display outputs.
> ```

vs 

```rust
/// Limit an amount of rows will be read for dimension estimations.
```

I do think we can go with what you'll chose the right one.
IsaacCloos: Ok, Thanks for the feedback! I'll work through the rest of these shortly 😄 

Patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index fcdda38..5901010 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -120,7 +120,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
-      - uses: dtolnay/rust-toolchain@1.70.0
+      - uses: dtolnay/rust-toolchain@1.61.0
       - run: cargo build --manifest-path=./tabled/Cargo.toml --all-features
 
   fmt:
diff --git a/csv_to_table/examples/csv_table.rs b/csv_to_table/examples/csv_table.rs
index 5498cee..49f0e78 100644
--- a/csv_to_table/examples/csv_table.rs
+++ b/csv_to_table/examples/csv_table.rs
@@ -1,5 +1,12 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example csv_table`
+//!
+//! This example demonstrates reading a csv string to a [`Table`] struct.
+//!
+//! ---
+//!
+//! * Note the necessary step of representing the string as a byte array.
 
 fn main() {
     let syscalls = "\
diff --git a/csv_to_table/examples/iter.rs b/csv_to_table/examples/iter.rs
index 2a62f8e..d2277ff 100644
--- a/csv_to_table/examples/iter.rs
+++ b/csv_to_table/examples/iter.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example iter`
+//!
+//! This example demonstrates an alternative parsing option for [`csv_to_table`] translations.
+//!
+//! ---
+//!
+//! * The [`IterTable::sniff()`] formatting function is used to control how many
+//! rows will be considered in determining column widths. Since the default sniff value is 1000,
+//! this is helpful for controlling large dataset display outputs.
 
 fn main() {
     let syscalls = "\
diff --git a/json_to_table/examples/collapse.rs b/json_to_table/examples/collapse.rs
index fa67fcf..a586e72 100644
--- a/json_to_table/examples/collapse.rs
+++ b/json_to_table/examples/collapse.rs
@@ -1,5 +1,13 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example collapse`
+//!
+//! This example demonstrates using the [`JsonTable::collapse`] function
+//! to greatly improve the readability of a [`JsonTable`].
+//!
+//! ---
+//!
+//! * Note that a [`JsonTable`] must be mutably defined to be collapsed.
 
 use json_to_table::json_to_table;
 
diff --git a/json_to_table/examples/json_to_table.rs b/json_to_table/examples/json_to_table.rs
new file mode 100644
index 0000000..018ebaf
--- /dev/null
+++ b/json_to_table/examples/json_to_table.rs
@@ -0,0 +1,31 @@
+//! This example can be run with the following command:
+//!
+//! `cargo run --example json_to_table`
+//!
+//! This example demonstrates parsing a JSON literal to a [`Value`],
+//! and then translating that value to a [`JsonTable`] struct.
+//!
+//! ---
+//!
+//! * Note how the [`json_to_table`] function is used for easy translations.
+
+use json_to_table::json_to_table;
+
+fn main() {
+    let json = serde_json::json!({
+        "key1": "value1",
+        "key2": {
+            "key1": 123,
+            "key2": [1, 2, 3, 4, 5],
+        },
+        "key3": [
+            {"key": 123.3},
+            2,
+            "asd"
+        ],
+    });
+
+    let table = json_to_table(&json);
+
+    println!("{table}");
+}
diff --git a/json_to_table/examples/orientation.rs b/json_to_table/examples/orientation.rs
index 2a481fc..5e8ea5f 100644
--- a/json_to_table/examples/orientation.rs
+++ b/json_to_table/examples/orientation.rs
@@ -1,5 +1,17 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example orientation`
+//!
+//! This example demonstrates several [`JsonTable`] functions for rotating
+//! the arrangement of keys and values with the following functions:
+//!
+//! - [`JsonTable::set_array_mode`]
+//! - [`JsonTable::set_object_mode`]
+//! - [`JsonTable::set_mode_visitor`]
+//!
+//! ---
+//!
+//! * Note the shared [`Orientation`] enum between these methods.
 
 use json_to_table::{json_to_table, Orientation};
 
@@ -25,15 +37,6 @@ fn main() {
         .set_object_mode(Orientation::Horizontal);
 
     let ctable = json_to_table(&json);
-    let mut is_root = true;
-    let ctable = ctable.set_mode_visitor(move |_| {
-        if is_root {
-            is_root = false;
-            return Orientation::Vertical;
-        }
-
-        Orientation::Horizontal
-    });
 
     println!("Vertical mode\n{vtable}");
     println!("Horizontal mode\n{htable}");
diff --git a/json_to_table/examples/reader.rs b/json_to_table/examples/reader.rs
index e25e903..ffd76ed 100644
--- a/json_to_table/examples/reader.rs
+++ b/json_to_table/examples/reader.rs
@@ -1,17 +1,23 @@
-//! This example reads a json from STDIN and build a table out of it.
+//! This example can be run with the following command:
 //!
-//! Example usage.
+//! `cat some_interesting_data.json | cargo run --example reader -- --collapse`
 //!
-//! ```
-//! cat some_interesting_data.json | cargo run --example reader -- --collapse
-//! ```
+//! This example demonstrates parsing json from the [`Stdin`]\(standard input) to a [`JsonTable`].
+//!
+//! ---
+//!
+//! * Check out [`serde_json`] for other helpful ways to import json data into your project.
+//! * Check out [`std::env`] and [`std::io`] for more examples of dealing with system streams.
+//! * Windows alternatives for the unix `cat` command:
+//!     - `type` for command prompt
+//!     - `get-content` for powershell
 
-use std::io;
+use std::{env, io};
 
 use json_to_table::json_to_table;
 
 fn main() {
-    let use_collapse = std::env::args().any(|arg| &arg == "--collapse");
+    let use_collapse = env::args().any(|arg| &arg == "--collapse");
 
     let stdin = io::stdin();
     let value = serde_json::from_reader(stdin).expect("failed to read stdin");
diff --git a/json_to_table/src/lib.rs b/json_to_table/src/lib.rs
index 11a1da8..e304fe7 100644
--- a/json_to_table/src/lib.rs
+++ b/json_to_table/src/lib.rs
@@ -98,6 +98,6 @@ mod table;
 /// See the example in a module documentation.
 ///
 /// [`Table`]: tabled::Table
-pub fn json_to_table(value: &Value) -> JsonTable<'_> {
+pub fn json_to_table(value: &Value) -> JsonTable<&Value> {
     JsonTable::new(value)
 }
diff --git a/json_to_table/src/table.rs b/json_to_table/src/table.rs
index d210cae..54d8924 100644
--- a/json_to_table/src/table.rs
+++ b/json_to_table/src/table.rs
@@ -1,4 +1,5 @@
 use core::fmt::{self, Display};
+use std::borrow::Borrow;
 
 use serde_json::Value;
 use tabled::{
@@ -9,16 +10,17 @@ use tabled::{
 
 /// Converter of [`Value`] to a table,
 /// with a set of configurations.
+
+// todo: rename to ValueTable.
 #[derive(Debug, Clone)]
-pub struct JsonTable<'val, ModeVisitor = fn(&Value) -> Orientation> {
-    value: &'val Value,
+pub struct JsonTable<T> {
+    value: T,
     cfg: Config,
-    mode_visitor: Option<ModeVisitor>,
 }
 
-impl JsonTable<'_> {
+impl<T> JsonTable<T> {
     /// Creates a new [`JsonTable`] object.
-    pub fn new(value: &Value) -> JsonTable<'_> {
+    pub fn new(value: T) -> Self {
         JsonTable {
             value,
             cfg: Config {
@@ -28,12 +30,9 @@ impl JsonTable<'_> {
                 array_orientation: Orientation::Vertical,
                 object_orientation: Orientation::Vertical,
             },
-            mode_visitor: None,
         }
     }
-}
 
-impl<'val, ModeVisitor> JsonTable<'val, ModeVisitor> {
     /// Set a style which will be used,
     /// default is [`Style::ascii`].
     pub fn set_style(&mut self, style: impl Into<RawStyle>) -> &mut Self {
@@ -48,35 +47,17 @@ impl<'val, ModeVisitor> JsonTable<'val, ModeVisitor> {
     }
 
     /// Set a table mode for a [`serde_json::Value::Object`].
-    ///
-    /// BE AWARE: The setting works only in not collapsed mode.
     pub fn set_object_mode(&mut self, mode: Orientation) -> &mut Self {
         self.cfg.object_orientation = mode;
         self
     }
 
     /// Set a table mode for a [`serde_json::Value::Array`].
-    ///
-    /// BE AWARE: The setting works only in not collapsed mode.
     pub fn set_array_mode(&mut self, mode: Orientation) -> &mut Self {
         self.cfg.array_orientation = mode;
         self
     }
 
-    /// Set a visitor which can configure table mode at processing time.
-    ///
-    /// BE AWARE: The setting works only in not collapsed mode.
-    pub fn set_mode_visitor<F>(self, visitor: F) -> JsonTable<'val, F>
-    where
-        F: FnMut(&Value) -> Orientation,
-    {
-        JsonTable {
-            cfg: self.cfg,
-            mode_visitor: Some(visitor),
-            value: self.value,
-        }
-    }
-
     /// Set a config which will be used.
     ///
     /// You can obtain a config from a [`Table`].
@@ -141,23 +122,22 @@ impl<'val, ModeVisitor> JsonTable<'val, ModeVisitor> {
     }
 }
 
-impl<ModeVisitor> Display for JsonTable<'_, ModeVisitor>
+impl<T> Display for JsonTable<T>
 where
-    ModeVisitor: FnMut(&Value) -> Orientation + Clone,
+    T: Borrow<Value>,
 {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        let mut mode_visitor = self.mode_visitor.clone();
-        let table = json_to_table::json_to_table(self.value, &self.cfg, mode_visitor.as_mut());
+        let table = json_to_table::json_to_table(self.value.borrow(), &self.cfg);
         table.fmt(f)
     }
 }
 
-impl<ModeVisitor> From<JsonTable<'_, ModeVisitor>> for Table
+impl<T> From<JsonTable<T>> for Table
 where
-    ModeVisitor: FnMut(&Value) -> Orientation,
+    T: Borrow<Value>,
 {
-    fn from(mut t: JsonTable<'_, ModeVisitor>) -> Self {
-        json_to_table::json_to_table(t.value, &t.cfg, t.mode_visitor.as_mut())
+    fn from(t: JsonTable<T>) -> Self {
+        json_to_table::json_to_table(t.value.borrow(), &t.cfg)
     }
 }
 
@@ -172,7 +152,7 @@ struct Config {
 
 /// The structure represents a table mode for a given entity,
 /// either it will be rendered vertically or horizontally.
-#[derive(Debug, Clone, Copy)]
+#[derive(Debug, Clone, Copy, Eq, PartialEq, PartialOrd, Ord)]
 pub enum Orientation {
     /// Vertical mode (from top to bottom).
     Vertical,
@@ -199,52 +179,30 @@ mod json_to_table {
 
     use super::*;
 
-    pub(super) fn json_to_table<F>(
-        value: &Value,
-        cfg: &Config,
-        mut mode_visitor: Option<&mut F>,
-    ) -> Table
-    where
-        F: FnMut(&Value) -> Orientation,
-    {
+    pub(super) fn json_to_table(value: &Value, cfg: &Config) -> Table {
         if cfg.plain {
-            json_to_table_f(value, cfg, &mut mode_visitor, true)
+            json_to_table_f(value, cfg, true)
         } else {
             json_to_table_r(value, cfg, 0, 0, true, true, false, false, &[], None)
         }
     }
 
-    fn json_to_table_f<F>(
-        v: &Value,
-        config: &Config,
-        mode_visitor: &mut Option<&mut F>,
-        outer: bool,
-    ) -> Table
-    where
-        F: FnMut(&Value) -> Orientation,
-    {
+    fn json_to_table_f(v: &Value, config: &Config, outer: bool) -> Table {
         match v {
             Value::Array(arr) => {
                 let mut builder = Builder::new();
 
-                let orientation = mode_visitor
-                    .as_mut()
-                    .map(|f| (f)(v))
-                    .unwrap_or(config.array_orientation);
-
-                match orientation {
+                match config.array_orientation {
                     Orientation::Vertical => {
                         for value in arr {
-                            let val =
-                                json_to_table_f(value, config, mode_visitor, false).to_string();
+                            let val = json_to_table_f(value, config, false).to_string();
                             builder.push_record([val]);
                         }
                     }
                     Orientation::Horizontal => {
                         let mut row = Vec::with_capacity(arr.len());
                         for value in arr {
-                            let val =
-                                json_to_table_f(value, config, mode_visitor, false).to_string();
+                            let val = json_to_table_f(value, config, false).to_string();
                             row.push(val);
                         }
 
@@ -258,16 +216,10 @@ mod json_to_table {
             Value::Object(map) => {
                 let mut builder = Builder::new();
 
-                let orientation = mode_visitor
-                    .as_mut()
-                    .map(|f| (f)(v))
-                    .unwrap_or(config.object_orientation);
-
-                match orientation {
+                match config.object_orientation {
                     Orientation::Vertical => {
                         for (key, value) in map {
-                            let val =
-                                json_to_table_f(value, config, mode_visitor, false).to_string();
+                            let val = json_to_table_f(value, config, false).to_string();
                             builder.push_record([key.clone(), val]);
                         }
                     }
@@ -275,8 +227,7 @@ mod json_to_table {
                         let mut keys = Vec::with_capacity(map.len());
                         let mut vals = Vec::with_capacity(map.len());
                         for (key, value) in map {
-                            let val =
-                                json_to_table_f(value, config, mode_visitor, false).to_string();
+                            let val = json_to_table_f(value, config, false).to_string();
                             vals.push(val);
                             keys.push(key.clone());
                         }
@@ -896,4 +847,21 @@ mod json_to_table {
             self.0 = cfg.get_borders().top_intersection.unwrap_or(' ');
         }
     }
+
+    struct GetWidths(Vec<usize>);
+
+    impl<R, D> TableOption<R, D, ColoredConfig> for GetWidths
+    where
+        R: Records,
+        for<'a> &'a R: Records,
+        for<'a> D: Dimension + Estimate<&'a R, SpannedConfig>,
+    {
+        fn change(&mut self, records: &mut R, cfg: &mut ColoredConfig, dims: &mut D) {
+            dims.estimate(&*records, cfg);
+
+            self.0 = (0..records.count_columns())
+                .map(|col| dims.get_width(col))
+                .collect();
+        }
+    }
 }
diff --git a/papergrid/examples/color_map.rs b/papergrid/examples/color_map.rs
index f3f72b3..bd94ae0 100644
--- a/papergrid/examples/color_map.rs
+++ b/papergrid/examples/color_map.rs
@@ -1,7 +1,15 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --features color --example color_map`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates using a [`HashMap`] of colors to simplify styling
+//! sections of a [`Grid`] without embedding ANSI escape characters into cell values.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * Check out [`owo_colors`] for additional styling options available through their API.
 
 use std::{
     collections::HashMap,
diff --git a/papergrid/examples/colored_border.rs b/papergrid/examples/colored_border.rs
index 4bcd0a6..41e41f1 100644
--- a/papergrid/examples/colored_border.rs
+++ b/papergrid/examples/colored_border.rs
@@ -1,7 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --features color --example colored_border`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates using colors to stylize [`Grid`] borders.
+//! Borders can be set globally with [`SpannedConfig::set_border_color_global()`]
+//! or individually with [`SpannedConfig::set_border_color()`].
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * [`CompactConfig`] also supports colorization when the `color` feature is enabled.
 
 use papergrid::{
     color::AnsiColor,
@@ -18,7 +27,7 @@ fn main() {
     let cfg = generate_table_config();
 
     let data = vec![
-        vec!["Papergrid", "is a library", "for print tables", "!"],
+        vec!["Papergrid", "is a library", "for printing tables", "!"],
         vec!["", "Just like this", "", ""],
     ];
     let records = IterRecords::new(data, 4, Some(2));
diff --git a/papergrid/examples/common_grid.rs b/papergrid/examples/common_grid.rs
index 4a203dd..c388e24 100644
--- a/papergrid/examples/common_grid.rs
+++ b/papergrid/examples/common_grid.rs
@@ -1,5 +1,15 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example common_grid`
+//!
+//! This example demonstrates the flexibility of [`papergrid`] with manual configurations
+//! of [`Borders`], [`CompactConfig`], and column counts with [`IterRecords`].
+//!
+//! ---
+//!
+//! * For an alternative to [`CompactGrid`] and [`CompactGridDimension`] with
+//! flexible row height, variable intra-column spans, and multiline cell support
+//! see [`Grid`] and [`SpannedGridDimension`].
 
 use papergrid::{
     config::compact::CompactConfig,
@@ -14,7 +24,7 @@ fn main() {
     let cfg = generate_table_config();
 
     let data = [
-        ["Papergrid", "is a library", "for print tables", "!"],
+        ["Papergrid", "is a library", "for printing tables", "!"],
         [
             "Just like this",
             "NOTICE",
diff --git a/papergrid/examples/common_grid_no_std.rs b/papergrid/examples/common_grid_no_std.rs
index f41b9d2..c6465e3 100644
--- a/papergrid/examples/common_grid_no_std.rs
+++ b/papergrid/examples/common_grid_no_std.rs
@@ -1,5 +1,12 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example common_grid_no_std`
+//!
+//! This example demonstrates using [`papergrid`] without [The Rust Standard Library](std).
+//!
+//! ---
+//!
+//! * Note the missing, pre-built [`Dimension`] implementations requiring manual design.
 
 use papergrid::{
     config::compact::CompactConfig,
@@ -11,7 +18,7 @@ use papergrid::{
 
 fn main() {
     let data = [
-        ["Papergrid", "is a library", "for print tables", "!"],
+        ["Papergrid", "is a library", "for printing tables", "!"],
         [
             "Just like this",
             "NOTICE",
diff --git a/papergrid/examples/hello_world.rs b/papergrid/examples/hello_world.rs
index c10eec8..6ad684f 100644
--- a/papergrid/examples/hello_world.rs
+++ b/papergrid/examples/hello_world.rs
@@ -1,5 +1,19 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example hello_world`
+//!
+//! This example demonstrates the flexibility of [`papergrid`] with manual configurations
+//! of [`Borders`], [`SpannedConfig`], and column counts with [`IterRecords`].
+//!
+//! ---
+//!
+//! * For an alternative to [`Grid`] and [`SpannedGridDimension`] with
+//! uniform row height and intra-column spans see [`CompactGrid`] and [`CompactGridDimension`].
+//!
+//! * Note that [`Grid`] supports multiline cells whereas [`CompactGrid`] does not.
+//!
+//! * Note that [`Dimension`] implementations rely on [`Dimension::estimate()`]
+//! to correctly format outputs, and typically trigger index-out-of-bounds errors otherwise.
 
 use papergrid::{
     colors::NoColors,
@@ -15,8 +29,13 @@ fn main() {
     let cfg = generate_table_config();
 
     let data = [
-        ["Papergrid", "is a library", "for print tables", "!"],
-        ["", "Just like this", "", ""],
+        ["Papergrid", "is a library", "for printing tables", "!"],
+        [
+            "",
+            "Just                                     like\n\nthis",
+            "",
+            "",
+        ],
     ];
     let records = IterRecords::new(data, 4, None);
 
diff --git a/papergrid/examples/papergrid_color.rs b/papergrid/examples/papergrid_color.rs
index b8cf366..87690d4 100644
--- a/papergrid/examples/papergrid_color.rs
+++ b/papergrid/examples/papergrid_color.rs
@@ -1,7 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --features color --example papergrid_color`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates using colors to stylize [`Grid`] cells.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * Note that this example uses inline ANSI escape characters to style
+//! grid cells. `Grid::new(_, _, _, NoColors)` indicates that a color
+//! map is not provided. NOT that colors are ignored in the output.
 
 use std::io::Write;
 
diff --git a/papergrid/src/config/compact/mod.rs b/papergrid/src/config/compact/mod.rs
index 24b4539..7064321 100644
--- a/papergrid/src/config/compact/mod.rs
+++ b/papergrid/src/config/compact/mod.rs
@@ -37,7 +37,12 @@ impl CompactConfig {
             border_colors: Borders::empty(),
             margin: Sides::filled(Indent::zero()),
             margin_color: Sides::filled(StaticColor::new("", "")),
-            padding: Sides::filled(Indent::zero()),
+            padding: Sides::new(
+                Indent::spaced(1),
+                Indent::spaced(1),
+                Indent::zero(),
+                Indent::zero(),
+            ),
             padding_color: Sides::filled(StaticColor::new("", "")),
         }
     }
@@ -134,9 +139,3 @@ impl CompactConfig {
         self.padding_color
     }
 }
-
-impl From<&CompactConfig> for CompactConfig {
-    fn from(value: &CompactConfig) -> Self {
-        *value
-    }
-}
diff --git a/static_table/examples/static_table.rs b/static_table/examples/static_table.rs
index 04f298d..a638817 100644
--- a/static_table/examples/static_table.rs
+++ b/static_table/examples/static_table.rs
@@ -1,5 +1,21 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example static_table`
+//!
+//! This example demonstrates using the powerful [`static_table!`] macro to translate
+//! a sequence of arrays and several, optional settings to a static [`str`] table representation.
+//!
+//! ---
+//!
+//! * Note that [`static_table!`] is evaluated at compile time,
+//! resulting in highly efficient runtime performance.
+//!
+//! * [`static_table!`] supports configuration of:
+//!     * granular column and row span specification
+//!     * [`THEME`](tabled::settings::Style)
+//!     * [`ALIGNMENT`](tabled::settings::Alignment)
+//!     * [`PADDING`](`tabled::settings::Padding`)
+//!     * [`MARGIN`](tabled::settings::Margin)
 
 use static_table::static_table;
 
diff --git a/static_table/src/lib.rs b/static_table/src/lib.rs
index ad7dc0c..fffc158 100644
--- a/static_table/src/lib.rs
+++ b/static_table/src/lib.rs
@@ -1,4 +1,4 @@
-//! Library provides a macros to build a table at a compile time.
+//! This library provides a macro to build a table at compile time.
 //!
 //! # Get started
 //!
diff --git a/table_to_html/examples/html.rs b/table_to_html/examples/html.rs
index e6caab1..5b7b087 100644
--- a/table_to_html/examples/html.rs
+++ b/table_to_html/examples/html.rs
@@ -1,5 +1,21 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example html`
+//!
+//! This example demonstrates using [`HtmlTable`] to easily transform a multi-dimensional array
+//! into web-friendly [html](https://developer.mozilla.org/en-US/docs/Web/HTML).
+//!
+//! ---
+//!
+//! * Note how [`HtmlTable::set_border()`] is used to customize the output markup.
+//! These changes are implemented through a prepended [style](https://developer.mozilla.org/en-US/docs/Web/css)
+//! section above the opening table tag.
+//!
+//! * Customization options include:
+//!     * Border
+//!     * Alignment
+//!     * Column and Row span
+//!     * Margin and Padding
 
 use table_to_html::HtmlTable;
 
diff --git a/tabled/Cargo.toml b/tabled/Cargo.toml
index dd170c6..e50b1ed 100644
--- a/tabled/Cargo.toml
+++ b/tabled/Cargo.toml
@@ -17,12 +17,17 @@ rust-version = "1.61.0"
 coveralls = { repository = "https://github.com/zhiburt/tabled", branch = "master", service = "github" }
 maintenance = { status = "actively-developed" }
 
+[[example]]
+name = "color"
+required-features = ["color", "derive"]
+
 [[example]]
 name = "colored_borders"
 required-features = ["derive"]
 
 [[example]]
-name = "color"
+name = "colored_padding"
+path = "examples/colored_padding.rs"
 required-features = ["color", "derive"]
 
 [[example]]
@@ -124,11 +129,6 @@ name = "nested_table_3"
 path = "examples/nested_table_3.rs"
 required-features = ["derive"]
 
-[[example]]
-name = "padding_color"
-path = "examples/padding_color.rs"
-required-features = ["color", "derive"]
-
 [[example]]
 name = "col_row_macros"
 path = "examples/col_row_macros.rs"
diff --git a/tabled/examples/alphabet.rs b/tabled/examples/alphabet.rs
index abc3e7f..a069cd1 100644
--- a/tabled/examples/alphabet.rs
+++ b/tabled/examples/alphabet.rs
@@ -1,5 +1,13 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example alphabet`
+//!
+//! This example demonstrates instantiating a [`Table`] from an [`IntoIterator`] compliant object.
+//!
+//! ---
+//!
+//! * Note how [`Range`] [expression syntax](https://doc.rust-lang.org/reference/expressions/range-expr.html)
+//! is used to idiomatically represent the English alphabet.
 
 use std::iter::FromIterator;
 
diff --git a/tabled/examples/border_text.rs b/tabled/examples/border_text.rs
index 742fed2..777005f 100644
--- a/tabled/examples/border_text.rs
+++ b/tabled/examples/border_text.rs
@@ -1,5 +1,28 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example border_text`
+//!
+//! This example demonstrates inserting text into the borders
+//! of a [`Table`] with [`BorderText`]; a powerful labeling tool.
+//!
+//! ---
+//!
+//! * [`BorderText`] currently supports:
+//!     * Horizontal border placement
+//!     * Placement starting column offset
+//!     * Text colorization
+//!
+//! * Note how the flexibility of [`Style`] is utilized
+//! to remove horizontal borders from the table entirely,
+//! and then granularly reinserts one for a highly customized
+//! visualization.
+//!
+//! * Note how the [`Rows`] utility object is used to idiomatically
+//! reference the first and last rows of a [`Table`] without writing
+//! the necessary logic by hand.
+//!
+//! * 🚀 Combining several easy-to-use tools,
+//! to create unique data representations is what makes [`tabled`] great!
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/builder.rs b/tabled/examples/builder.rs
index a0bf025..d6eafab 100644
--- a/tabled/examples/builder.rs
+++ b/tabled/examples/builder.rs
@@ -1,5 +1,18 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example builder`
+//!
+//! This example demonstrates an alternative method for creating a [`Table`].
+//! [`Builder`] is an efficient implementation of the [builder design pattern](https://en.wikipedia.org/wiki/Builder_pattern).
+//!
+//! > The intent of the Builder design pattern is to separate the construction of a complex object from its representation.
+//! > -- <cite>Wikipedia</cite>
+//!
+//! ---
+//!
+//! * Note how [Builder] can be used to define a table's shape manually
+//!  and can be populated through iteration if it is mutable. This flexibility
+//! is useful when you don't have direct control over the datasets you intend to [table](tabled).
 
 use tabled::{
     builder::Builder,
diff --git a/tabled/examples/builder_index.rs b/tabled/examples/builder_index.rs
index aba01d7..8c16e9c 100644
--- a/tabled/examples/builder_index.rs
+++ b/tabled/examples/builder_index.rs
@@ -1,5 +1,19 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example builder_index`
+//!
+//! This example demonstrates evolving the standard [`Builder`] to an [`IndexBuilder`],
+//! and then manipulating the constructing table with a newly prepended index column.
+//!
+//! ---
+//!
+//! * An [`IndexBuilder`] is capable of several useful manipulations, including:
+//!     * Giving the new index column a name
+//!     * Transposing the index column around a table
+//!     * Choosing a location for the new index column besides 0; the default
+//!
+//! * Note that like with any builder pattern the [`IndexBuilder::build()`] function
+//! is necessary to produce a displayable [`Table`].
 
 use tabled::{settings::Style, Table, Tabled};
 
diff --git a/tabled/examples/col_row_macros.rs b/tabled/examples/col_row_macros.rs
index 14874d7..45b5224 100644
--- a/tabled/examples/col_row_macros.rs
+++ b/tabled/examples/col_row_macros.rs
@@ -1,7 +1,19 @@
-//! The example can be run by this command
-//! `cargo run --example col_row_macros --features macros`
+//! This example can be run with the following command:
 //!
-//! This example requires the `macros` feature.
+//! `cargo run --features macros --example col_row_macros`
+//!
+//! This example demonstrates using the [`col!`] and [`row!`] macros to easily
+//! organize multiple tables together into a single, new [`Table`] display.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `macros` feature.
+//!
+//! * Note how both macros can be used in combination to layer
+//! several table arrangements together.
+//!
+//! * Note how [`col!`] and [`row!`] support idiomatic argument duplication
+//! with the familiar `[T; N]` syntax.
 
 use tabled::{
     col, row,
diff --git a/tabled/examples/color.rs b/tabled/examples/color.rs
index 3555c02..1a16c12 100644
--- a/tabled/examples/color.rs
+++ b/tabled/examples/color.rs
@@ -1,7 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --features color --example color`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates using the [`Color`] [setting](tabled::settings) to
+//! stylize text, backgrounds, and borders.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * Note how [`Format::content()`] is used to break out [`CellOption`]
+//! specifications. This is helpful for organizing extensive [`Table`] configurations.
 
 use std::convert::TryFrom;
 
diff --git a/tabled/examples/colored_borders.rs b/tabled/examples/colored_borders.rs
index 33c599e..059ce14 100644
--- a/tabled/examples/colored_borders.rs
+++ b/tabled/examples/colored_borders.rs
@@ -1,7 +1,17 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --features color --example colored_borders`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates using the [`RawStyle`] [setting](tabled::settings) to
+//! to granularly specify border colors.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * Note how [`Color`] containts several helpful, const values covering
+//! a basic selection of foreground and background colors. [`Color`] also
+//! supports custom colors with [`Color::new()`].
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/padding_color.rs b/tabled/examples/colored_padding.rs
similarity index 89%
rename from tabled/examples/padding_color.rs
rename to tabled/examples/colored_padding.rs
index b57fee2..ca36e72 100644
--- a/tabled/examples/padding_color.rs
+++ b/tabled/examples/colored_padding.rs
@@ -1,8 +1,18 @@
-//! The example can be run by this command.
+//! This example can be run with the following command:
 //!
-//! `cargo run --features color --example padding_color`
+//! `cargo run --features color --example colored_padding`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates using the [`Padding::colorize()`] function in several ways
+//! to give a [`Table`] display a vibrant asthetic.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * Note how the [`Color`] [setting](tabled::settings) is used to simplify creating
+//! reusable themes for text, backgrounds, padded whitespace, and borders.
+//!
+//! * Note how a unique color can be set for each direction.
 
 use std::convert::TryFrom;
 
diff --git a/tabled/examples/compact_table.rs b/tabled/examples/compact_table.rs
index 4aced06..c34c403 100644
--- a/tabled/examples/compact_table.rs
+++ b/tabled/examples/compact_table.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example compact_table`
+//!
+//! This example demonstrates creating a `new()` [`CompactTable`] with
+//! manual specifications for column count, column widths, and border styling.
+//!
+//! ---
+//!
+//! * [`CompactTable`] is a [`Table`] alternative that trades off reduced
+//! flexibility for improved performance.
 
 use tabled::{settings::Style, tables::CompactTable};
 
diff --git a/tabled/examples/compact_table_2.rs b/tabled/examples/compact_table_2.rs
index da86c61..ee7ea56 100644
--- a/tabled/examples/compact_table_2.rs
+++ b/tabled/examples/compact_table_2.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example compact_table_2`
+//!
+//! This example demonstrates creating a [`CompactTable`] `from()` a
+//! multidimensional array.
+//!
+//! ---
+//!
+//! * Note how [`CompactTable::from()`] inherits the lengths of the nested arrays
+//! as typed definitions through [const generics](https://practice.rs/generics-traits/const-generics.html).
 
 use tabled::{settings::Style, tables::CompactTable};
 
diff --git a/tabled/examples/compact_table_3.rs b/tabled/examples/compact_table_3.rs
index cc218b9..bdeda34 100644
--- a/tabled/examples/compact_table_3.rs
+++ b/tabled/examples/compact_table_3.rs
@@ -1,5 +1,13 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example compact_table_3`
+//!
+//! This example demonstrates how [`CompactTable`] is limited to single
+//! line rows.
+//!
+//! ---
+//!
+//! * Note how the multiline data is accepted, but then truncated in the display.
 
 use tabled::{settings::Style, tables::CompactTable};
 
diff --git a/tabled/examples/concat.rs b/tabled/examples/concat.rs
index a74cd86..4e02870 100644
--- a/tabled/examples/concat.rs
+++ b/tabled/examples/concat.rs
@@ -1,5 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example concat`
+//!
+//! This example demonstrates using the [`Concat`] [`TableOption`] to concatenate
+//! [`tables`](Table) together.
+//!
+//! ---
+//!
+//! * [`Concat`] supports appending tables vertically and horizontally.
+//!
+//! * Note how the base tables style settings take take precedence over the appended table.
+//! If the two tables are of unequal shape, additional blank cells are added as needed.
 
 use tabled::{
     settings::{object::Segment, Alignment, Concat, Modify, Style},
diff --git a/tabled/examples/custom_style.rs b/tabled/examples/custom_style.rs
index 886deb9..507616d 100644
--- a/tabled/examples/custom_style.rs
+++ b/tabled/examples/custom_style.rs
@@ -1,5 +1,17 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example custom_style`
+//!
+//! This example demonstrates customizing one of the [`tabled`] default [styles](Style)
+//! to create a unique [`Table`] display.
+//!
+//! ---
+//!
+//! * Note that all predesigned styles can be configured completely.
+//! Styles can also be created from scratch!
+//!
+//! * Note that adding and removing borders with a [`Style`] theme doesn't affect the
+//! number of functional columns and rows.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/derive/display_with.rs b/tabled/examples/derive/display_with.rs
index 0ecf6c1..ca0073b 100644
--- a/tabled/examples/derive/display_with.rs
+++ b/tabled/examples/derive/display_with.rs
@@ -1,5 +1,20 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example display_with`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`display_with`] to seamlessly augment field representations in a [`Table`] display.
+//!
+//! ---
+//!
+//! * [`display_with`] functions act as transformers during [`Table`] instantiation.
+//!
+//! * Note how [`display_with`] works with [std] and custom functions alike.
+//!
+//! * [`display_with`] attributes can be constructed in two ways (shown below).
+//!
+//! * Attribute arguments can be directly overridden with static values, effectively ignoring the
+//! augmented fields natural value entirely. Even an entire object can be passed as context with `self`.
 
 use std::borrow::Cow;
 
diff --git a/tabled/examples/derive/inline.rs b/tabled/examples/derive/inline.rs
index 28a3c5f..ce0f268 100644
--- a/tabled/examples/derive/inline.rs
+++ b/tabled/examples/derive/inline.rs
@@ -1,5 +1,15 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example inline`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`inline`] to expand struct fields to individual columns in a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note that without inlining a struct or enum field, those objects
+//! must implement the [`Display`] trait as they will be represented in
+//! a single column with the value of their [`ToString`] output.
 
 use tabled::{Table, Tabled};
 
diff --git a/tabled/examples/derive/inline_enum.rs b/tabled/examples/derive/inline_enum.rs
index 6ab9cb8..b278a2e 100644
--- a/tabled/examples/derive/inline_enum.rs
+++ b/tabled/examples/derive/inline_enum.rs
@@ -1,5 +1,19 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example inline_enum`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`inline`] to expand enum fields to individual columns in a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note how the optional [`inline`] argument is used to apply prefixes
+//! to decomposed column headers. This is helpful for organizing tables
+//! with repetative fields that would normally result in confusing headers.
+//!
+//! * Note that without inlining a struct or enum field, those objects
+//! must implement the [`Display`] trait as they will be represented in
+//! a single column with the value of their [`ToString`] output.
 
 use tabled::{Table, Tabled};
 
diff --git a/tabled/examples/derive/order.rs b/tabled/examples/derive/order.rs
index 3bb5116..f0fe2ce 100644
--- a/tabled/examples/derive/order.rs
+++ b/tabled/examples/derive/order.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example order`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`order`] to relocate fields to specified indexes in a [`Table`] display.
+//!
+//! ---
+//!
+//! * By default, [`Table`] columns are shown in the same ordered they are
+//! defined in the deriving struct/enum definition.
 
 use tabled::{Table, Tabled};
 
diff --git a/tabled/examples/derive/rename.rs b/tabled/examples/derive/rename.rs
index 20e26a1..31e0790 100644
--- a/tabled/examples/derive/rename.rs
+++ b/tabled/examples/derive/rename.rs
@@ -1,5 +1,9 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example rename`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`rename`] to alias specific fields in a [`Table`] display.
 
 use tabled::{Table, Tabled};
 
diff --git a/tabled/examples/derive/rename_all.rs b/tabled/examples/derive/rename_all.rs
index f9f9e22..a114916 100644
--- a/tabled/examples/derive/rename_all.rs
+++ b/tabled/examples/derive/rename_all.rs
@@ -1,5 +1,21 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example rename_all`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`rename_all`] to apply table-wide header formatting in a [`Table`] display.
+//!
+//! ---
+//!
+//! * Supported formatting rules include:
+//!     * 'camelCase'
+//!     * 'kabab-case'
+//!     * 'PascalCase'
+//!     * 'SCREAMING_SNAKE_CASE'
+//!     * 'snake_case'
+//!     * 'lowercase'
+//!     * 'UPPERCASE'
+//!     * 'verbatim'
 
 use tabled::{Table, Tabled};
 
diff --git a/tabled/examples/derive/skip.rs b/tabled/examples/derive/skip.rs
index 3401539..dcae669 100644
--- a/tabled/examples/derive/skip.rs
+++ b/tabled/examples/derive/skip.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example skip`
+//!
+//! This example demonstrates using the [attribute macro](https://doc.rust-lang.org/reference/procedural-macros.html#attribute-macros)
+//! [`skip`] to omit specific fields from becoming columns in a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note how [`skip`] annoys [clippy](https://doc.rust-lang.org/clippy/) with `dead_code`
+//! warnings. This can be addressed with compiler overrides like `#[allow(dead_code)]`.
 
 use tabled::{Table, Tabled};
 
diff --git a/tabled/examples/disable.rs b/tabled/examples/disable.rs
index d9bc155..6c1b39f 100644
--- a/tabled/examples/disable.rs
+++ b/tabled/examples/disable.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example disable`
+//!
+//! This example demonstrates using the [`Disable`] [`TableOption`] to remove specific
+//! cell data from a [`Table`] display.
+//!
+//! ---
+//!
+//! * ⚠️ Using [`Disable`] in combination with other [`Style`] customizations may yield unexpected results.
+//! It is safest to use [`Disable`] last in a chain of alterations.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/extended_display.rs b/tabled/examples/extended_display.rs
index 980d69d..00dd83a 100644
--- a/tabled/examples/extended_display.rs
+++ b/tabled/examples/extended_display.rs
@@ -1,5 +1,13 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example extended_display`
+//!
+//! This example demonstrates using [ExtendedTable], a [Table] alternative with
+//! limited flexibility but a greater emphasis on large data displays.
+//!
+//! ---
+//!
+//! * 🎉 Inspired by https://www.postgresql.org/docs/current/app-psql.html
 
 use tabled::{tables::ExtendedTable, Tabled};
 
diff --git a/tabled/examples/extract.rs b/tabled/examples/extract.rs
index 06964be..d9b95cd 100644
--- a/tabled/examples/extract.rs
+++ b/tabled/examples/extract.rs
@@ -1,5 +1,19 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example extract`
+//!
+//! This example demonstrates using the [`Extract`] [`TableOption`] to
+//! produce a subsection of a [`Table`].
+//!
+//! ---
+//!
+//! * [`Extract`] can return a new [`Table`] with three functions:
+//!     * `rows()` | yields subset of the initial rows
+//!     * `columns()` | yields subset of the initial columns
+//!     * `segment()` | yields subsection of the initial table
+//!
+//! * Note how [`Extract`] methods accepts [`RangeBounds`] arguments,
+//! making subset specifications concise.
 
 use std::fmt::{Display, Formatter};
 
diff --git a/tabled/examples/format.rs b/tabled/examples/format.rs
index dd7b67b..4aa89dc 100644
--- a/tabled/examples/format.rs
+++ b/tabled/examples/format.rs
@@ -1,7 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example format`
 //!
-//! The example shows a usage of [`tabled::Format`]/[`tabled::FormatWithIndex`].
+//! This example demonstrates using the [`Format`] [`CellOption`] factory to alter
+//! the cells of a [`Table`].
+//!
+//! ---
+//!
+//! * Note how [`Format::content()`] gives access to the respective cell content for replacement.
+//! And [`Format::positioned()`] additionally provides the index coordinates of that cell.
+//!
+//! * Note how the [std] [`format!`] macro is used to update the values of the affected cells.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/formatting_settings.rs b/tabled/examples/formatting_settings.rs
index 167c0ae..0670974 100644
--- a/tabled/examples/formatting_settings.rs
+++ b/tabled/examples/formatting_settings.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example formatting_settings`
+//!
+//! This example demonstrates using the [`Alignment`], [`AlignmentStrategy`], and [`TrimStrategy`] [`CellOptions`]
+//! to align the content of a [`Table`] in several nuanced ways.
+//!
+//! ---
+//!
+//! * Note how [`AlignmentStrategy`] and [`TrimStrategy`] provide useful tools for managing multiline cells and
+//! cell values that are bloated with whitespace.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/grid_colors.rs b/tabled/examples/grid_colors.rs
index 27a0763..b612415 100644
--- a/tabled/examples/grid_colors.rs
+++ b/tabled/examples/grid_colors.rs
@@ -1,9 +1,14 @@
-//! We can set colors for particular cells by using [`Grid`]
+//! This example can be run with the following command:
 //!
-//! The example can be run by this command
 //! `cargo run --example grid_colors`
 //!
-//! [`Grid`]: tabled::grid::Grid
+//! This example demonstrates using [`Color`] as a [`CellOption`] modifier to stylize
+//! the cells of a [`Table`].
+//!
+//! ---
+//!
+//! * Note how the [`Color`] [setting](tabled::settings) is used to simplify creating
+//! reusable themes for backgrounds.
 
 use tabled::{
     settings::{Color, Modify, Style},
diff --git a/tabled/examples/height.rs b/tabled/examples/height.rs
index 8ede899..c945cfe 100644
--- a/tabled/examples/height.rs
+++ b/tabled/examples/height.rs
@@ -1,5 +1,20 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example height`
+//!
+//! This example demonstrates using the [`Height`] [`TableOption`] for adjusting
+//! the height of a [`Table`].
+//!
+//! ---
+//!
+//! * [`Height`] supports three key features:
+//!     * [`CellHeightIncrease`] spreads new whitespace between the [`Table`]
+//! rows up to the specified line count.
+//!     * [`CellHeightLimit`] removes lines from the [`Table`] rows fairly, until
+//! it has no choice but to remove single-line-rows entirely, bottom up.
+//!     * [`HeightList`] accepts an array of height specifications that are applied
+//! to the rows with the same index. This is helpful for granularly specifying individual
+//! row heights irrespective of [`Padding`] or [`Margin`].
 
 use tabled::{
     settings::{peaker::PriorityMax, Height, Style},
diff --git a/tabled/examples/highlight.rs b/tabled/examples/highlight.rs
index 50a1af5..43ea09d 100644
--- a/tabled/examples/highlight.rs
+++ b/tabled/examples/highlight.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example highlight`
+//!
+//! This example demonstrates using the [`Highlight`] [`TableOption`] to
+//! decorate sections of a [`Table`] with a unique [`Border`].
+//!
+//! ---
+//!
+//! * Note how [`Highlight`] arguments can be chained together to
+//! create cross-sections and non-symmetrical shapes.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/highlight_color.rs b/tabled/examples/highlight_color.rs
index 252e2f8..d5c3ef6 100644
--- a/tabled/examples/highlight_color.rs
+++ b/tabled/examples/highlight_color.rs
@@ -1,5 +1,13 @@
-//! The example can be run by this command
-//! `cargo run --example highlight_color`
+//! This example can be run with the following command:
+//!
+//! `cargo run --example highlight`
+//!
+//! This example demonstrates using [`Highlight`] in combination with [`BorderColor`] to
+//! frame sections of a [`Table`] with a unique background [`Color`].
+//!
+//! ---
+//!
+//! * Note how [`Highlight::colored()`] is used to accept the necessary input instead of [`Highlight::new()`].
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/hyperlink.rs b/tabled/examples/hyperlink.rs
index 0c30753..ef271a1 100644
--- a/tabled/examples/hyperlink.rs
+++ b/tabled/examples/hyperlink.rs
@@ -1,7 +1,18 @@
-//! To run this example:
+//! This example can be run with the following command:
+//!
 //! `cargo run --features color --example hyperlink`
 //!
-//! This example requires the `color` feature.
+//! This example demonstrates how hyperlinks can be embedded into a [`Table`] display.
+//!
+//! While not a [`tabled`] specific implementation, it is helpful to know that
+//! most users expect certain elements of interactivity based on the purpose of your display.
+//!
+//! ---
+//!
+//! * 🚩 This example requires the `color` feature.
+//!
+//! * ⚠️ Terminal interfaces may differ in how they parse links or make them interactive.
+//! [`tabled`] doesn't have the final say on whether a link is clickable or not.
 
 use tabled::{
     settings::{object::Segment, Alignment, Modify, Style, Width},
diff --git a/tabled/examples/iter_table.rs b/tabled/examples/iter_table.rs
index 1d41e1b..8c69e34 100644
--- a/tabled/examples/iter_table.rs
+++ b/tabled/examples/iter_table.rs
@@ -1,5 +1,21 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example iter_table`
+//!
+//! This example demonstrates using [`IterTable`], an [allocation](https://doc.rust-lang.org/nomicon/vec/vec-alloc.html)
+//! free [`Table`] alternative that translates an iterator into a display.
+//!
+//! ---
+//!
+//! * Note how [`IterTable`] supports the familiar `.with()` syntax for applying display
+//! modifications.
+//!
+//! * [`IterTable`] supports manual configuration of:
+//!     * Record sniffing (default 1000 rows)
+//!     * Row cutoff
+//!     * Row height
+//!     * Column cutoff
+//!     * Column width
 
 use std::io::BufRead;
 
diff --git a/tabled/examples/margin.rs b/tabled/examples/margin.rs
index b44fee7..3758563 100644
--- a/tabled/examples/margin.rs
+++ b/tabled/examples/margin.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example margin`
+//!
+//! This example demonstrates using the [`Margin`] [`TableOption`] to buffer space
+//! around a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note how the [`Margin::fill()`] function allows for overriding the default whitespace
+//! with any [`char`].
 
 use tabled::{
     settings::{Margin, Style},
diff --git a/tabled/examples/matrix.rs b/tabled/examples/matrix.rs
index 14d151b..31e5c64 100644
--- a/tabled/examples/matrix.rs
+++ b/tabled/examples/matrix.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example matrix`
+//!
+//! This example demonstrates how [`tabled`] is an excellent tool for creating
+//! dataset visualizations.
+//!
+//! ---
+//!
+//! * 🚀 When native display solutions, such as the [`Debug`] trait and [pretty printing](https://doc.rust-lang.org/std/fmt/#sign0)
+//! options, aren't enough, [`tabled`] is a great choice for improving the quality of your displays.
 
 use tabled::{settings::Style, Table};
 
diff --git a/tabled/examples/merge_duplicates.rs b/tabled/examples/merge_duplicates.rs
index 787e55d..4db8a17 100644
--- a/tabled/examples/merge_duplicates.rs
+++ b/tabled/examples/merge_duplicates.rs
@@ -1,5 +1,19 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example merge_duplicates`
+//!
+//! This example demonstrates using the [`Merge`] [`TableOption`] to clarify
+//! redundancies in a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note how repetative entries must be consecutive, in their specified direction,
+//! to be merged together.
+//!
+//! * Note how [`BorderSpanCorrection`] is used to resolve display issues incurred
+//! from [`Span`] decisions made through duplicate detection.
+//!
+//! * Merge supports both [`Merge::vertical()`] and [`Merge::horizontal()`].
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/merge_duplicates_2.rs b/tabled/examples/merge_duplicates_2.rs
index 3736edb..acac4e1 100644
--- a/tabled/examples/merge_duplicates_2.rs
+++ b/tabled/examples/merge_duplicates_2.rs
@@ -1,5 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example merge_duplicates_2`
+//!
+//! This example demonstrates using the [`Merge`] [`TableOption`] to clarify
+//! redundancies in a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note how a custom theme is applied to give the [`Merged`](Merge) cells
+//! a unique look.
+//!
+//! * Merge supports both [`Merge::vertical()`] and [`Merge::horizontal()`].
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/nested_table.rs b/tabled/examples/nested_table.rs
index 95fa0de..aee6831 100644
--- a/tabled/examples/nested_table.rs
+++ b/tabled/examples/nested_table.rs
@@ -1,7 +1,17 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example nested_table`
 //!
-//! The table is a take on the one from https://github.com/p-ranav/tabulate#nested-tables/
+//! This example demonstrates how [`Tables`](Table) can be comprised of other tables.
+//!
+//! ---
+//!
+//! * This first nested [`Table`] example showcases the [`Builder`] approach.
+//!
+//! * Note how a great deal of manual customizations have been applied to create a
+//! highly unique display.
+//!
+//! * 🎉 Inspired by https://github.com/p-ranav/tabulate#nested-tables/
 
 use std::iter::FromIterator;
 
diff --git a/tabled/examples/nested_table_2.rs b/tabled/examples/nested_table_2.rs
index 266fe6b..ce784e5 100644
--- a/tabled/examples/nested_table_2.rs
+++ b/tabled/examples/nested_table_2.rs
@@ -1,5 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example nested_table_2`
+//!
+//! This example demonstrates a minimalist implementation of [`Tabling`](Table) records
+//! with struct fields.
+//!
+//! ---
+//!
+//! * This second nested [`Table`] example showcases the [`derive`] approach.
+//!
+//! * Note how the [`display_with`] attribute macro applies the custom `display_distribution`
+//! filter function, which, in this case, applies styles to the final display.
 
 use tabled::{settings::Style, Table, Tabled};
 
diff --git a/tabled/examples/nested_table_3.rs b/tabled/examples/nested_table_3.rs
index 2379031..f1b31f0 100644
--- a/tabled/examples/nested_table_3.rs
+++ b/tabled/examples/nested_table_3.rs
@@ -1,5 +1,13 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example nested_table_3`
+//!
+//! This example demonstrates creating a nested [`Table`] by instantiating a new
+//! [`Table`] from a collection of other [`Tables`](Table).
+//!
+//! ---
+//!
+//! * This third nested [`Table`] example showcases the [`Table::new()`] approach.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/panel.rs b/tabled/examples/panel.rs
index 8de8c9f..bd5214f 100644
--- a/tabled/examples/panel.rs
+++ b/tabled/examples/panel.rs
@@ -1,9 +1,21 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example panel`
+//!
+//! This example demonstrates using the [`Panel`] [`TableOption`] to inject
+//! table-length columns and rows into a [`Table`].
+//!
+//! ---
+//!
+//! * [`Panel`] supports four injection options:
+//!     * Horizontal | manual index selection
+//!     * Vertical | manual index selection
+//!     * Header | before first row
+//!     * Footer | after last row
 
 use tabled::{
     settings::{
-        object::{Cell, Segment},
+        object::Segment,
         style::{BorderSpanCorrection, Style},
         Alignment, Modify, Panel, Width,
     },
@@ -47,8 +59,8 @@ fn main() {
         .with(Panel::footer(format!("N - {}", DATA.len())))
         .with(Panel::vertical(0, "Some text goes here"))
         .with(Panel::vertical(5, "Some text goes here"))
-        .with(Modify::new(Cell::new(0, 0)).with(Width::wrap(1)))
-        .with(Modify::new(Cell::new(0, 5)).with(Width::wrap(1)))
+        .with(Modify::new((0, 0)).with(Width::wrap(1)))
+        .with(Modify::new((0, 5)).with(Width::wrap(1)))
         .with(Modify::new(Segment::all()).with(Alignment::center()))
         .with(Style::modern())
         .with(BorderSpanCorrection);
diff --git a/tabled/examples/rotate.rs b/tabled/examples/rotate.rs
index a7b7f3a..a16df1f 100644
--- a/tabled/examples/rotate.rs
+++ b/tabled/examples/rotate.rs
@@ -1,5 +1,16 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example rotate`
+//!
+//! This example demonstrates using the [`Rotate`] [`TableOption`] to rotate the cells
+//! of a [`Table`].
+//!
+//! ---
+//!
+//! * [`Rotate`] supports four motions:
+//!     * `Left` | 90 degree shift
+//!     * `Right` | 90 degree shift
+//!     * `Top` & `Bottom` | Reverse row order
 
 use tabled::{settings::Rotate, Table, Tabled};
 
diff --git a/tabled/examples/settings_list.rs b/tabled/examples/settings_list.rs
index 4a3bb8c..949931e 100644
--- a/tabled/examples/settings_list.rs
+++ b/tabled/examples/settings_list.rs
@@ -1,5 +1,14 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example settings_list`
+//!
+//! This example demonstrates using the [`Settings`] [`TableOption`] to array
+//! [`Table`] configurations in a separate step from instantiation.
+//!
+//! ---
+//!
+//! * Note how this methodoly can lead to huge performance gains
+//! with compile-time constants.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/shadow.rs b/tabled/examples/shadow.rs
index 499e8ab..f76503a 100644
--- a/tabled/examples/shadow.rs
+++ b/tabled/examples/shadow.rs
@@ -1,20 +1,20 @@
-//! The example relays on STDIN to read the message which will be outputted.
+//! This example can be run with the following command:
 //!
-//! The table is inspired by <https://en.wikipedia.org/wiki/Box-drawing_character>
+//! `echo -e -n 'Some text\nIn the box' | cargo run --example shadow`
 //!
+//! This example demonstrates using the [`Shadow`] [`TableOption`] to create
+//! a striking frame around a [`Table`] display.
 //!
-//! ┌───────────────────┐
-//! │  ╔═══╗ Some Text  │▒
-//! │  ╚═╦═╝ in the box │▒
-//! ╞═╤══╩══╤═══════════╡▒
-//! │ ├──┬──┤           │▒
-//! │ └──┴──┘           │▒
-//! └───────────────────┘▒
-//!  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
+//! ---
 //!
-//! ## Example
+//! * [`Shadow`] supports several configurations:
+//!     * Thickness
+//!     * Offset
+//!     * Direction
+//!     * Color
+//!     * Fill character
 //!
-//! `echo -e -n 'Some text\nIn the box' | cargo run --package tabled --example shadow`
+//! * 🎉 Inspired by <https://en.wikipedia.org/wiki/Box-drawing_character>
 
 use std::{io::Read, iter::FromIterator};
 
diff --git a/tabled/examples/span.rs b/tabled/examples/span.rs
index 5572d74..60cf66f 100644
--- a/tabled/examples/span.rs
+++ b/tabled/examples/span.rs
@@ -1,5 +1,18 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example span`
+//!
+//! This example demonstrates using the [`Span`] [`CellOption`] to
+//! extend [Cells](Cell) over a specified number of columns/rows.
+//!
+//! ---
+//!
+//! * Note how [`Span`] is available for [`Cell`] modifications
+//! after the [`Modify`] [`TableOption`] is applied.
+//!
+//! * ⚠️ `with()` is a reused pattern within [`tabled`] for both [`Table`]
+//! and [`Cell`] modifications. It can be easy for beginners to mistakenly
+//! try to pass [`settings`] intended for one to the other.
 
 use tabled::{
     settings::{
diff --git a/tabled/examples/split.rs b/tabled/examples/split.rs
index 913a482..11f26b9 100644
--- a/tabled/examples/split.rs
+++ b/tabled/examples/split.rs
@@ -1,5 +1,17 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example split`
+//!
+//! This example demonstrates using the [`Split`] [`TableOption`] to
+//! transform a [`Table`] display in multiple ways.
+//!
+//! ---
+//!
+//! * Several configurations are available to customize a [`Split`] instruction:
+//!     * [`Index`](usize)
+//!     * [`Behavior`]
+//!     * [`Direction`]
+//!     * [`Display`]
 
 use std::iter::FromIterator;
 use tabled::{
diff --git a/tabled/examples/table.rs b/tabled/examples/table.rs
index d79156e..059eac6 100644
--- a/tabled/examples/table.rs
+++ b/tabled/examples/table.rs
@@ -1,5 +1,28 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example table`
+//!
+//! This example demonstrates the fundemental qualities of the [crate](https://crates.io/crates/tabled) [`tabled`].
+//!
+//! ---
+//!
+//! * [`tabled`] is powered by convenient [procedural macros](https://doc.rust-lang.org/reference/procedural-macros.html#procedural-macros)
+//! like [`Tabled`]; a deriveable trait that allows your custom
+//! structs and enums to be represented with [`tabled`]'s powerful suite of features.
+//!
+//! * [`Table`] is the root object to which all of [`tabled`]'s implementation
+//! tools guide you, and from which all of its customization options derive value.
+//! The READMEs, examples, and docs found in this project will show you many dozens
+//! of ways you can build tables, and show you how to use the available tools
+//! to build the data representations that best fit your needs.
+//!
+//! * [`Table::with()`] plays a central role in giving the user control over their
+//! displays. A majority of [`Table`] customizations are implemented through this highly
+//! dynamic function. A few [`TableOptions`](TableOption) include:
+//!     * [`Style`]
+//!     * [`Modify`]
+//!     * [`Alignment`]
+//!     * [`Padding`]
 
 use tabled::{
     settings::{object::Rows, Alignment, Modify, Style},
diff --git a/tabled/examples/table_width.rs b/tabled/examples/table_width.rs
index 69a4fa1..30c0756 100644
--- a/tabled/examples/table_width.rs
+++ b/tabled/examples/table_width.rs
@@ -1,5 +1,17 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example table_width`
+//!
+//! This example demonstrates using the [`Width`] [`TableOption`] to expand and
+//! contract a [`Table`] display.
+//!
+//! ---
+//!
+//! * Note how table-wide size adjustments are applied proportionally to all columns.
+//!
+//! * Note how [fluent](https://en.wikipedia.org/wiki/Fluent_interface) functions
+//! are available to make subtle customizations to [`Width`] primary features like
+//! [`Width::truncate()`], [`Width::increase()`], and [`Width::wrap()`].
 
 use tabled::{
     settings::{measurement::Percent, object::Segment, Alignment, Modify, Style, Width},
diff --git a/tabled/examples/table_width_2.rs b/tabled/examples/table_width_2.rs
index f2da812..75c4eaa 100644
--- a/tabled/examples/table_width_2.rs
+++ b/tabled/examples/table_width_2.rs
@@ -1,5 +1,11 @@
-//! The example can be run by this command
+//! This example can be run with the following command:
+//!
 //! `cargo run --example table_width_2`
+//!
+//! This example demonstrates using [`Wrap::keep_words()`] to preserve
+//! word shape while truncating a table to the specified size. Without
+//! this setting enabled, a word could possibly be split into pieces,
+//! greatly reducing the legibility of the display.
 
 use tabled::{
     settings::{object::Segment, Alignment, Modify, Style, Width},
diff --git a/tabled/src/settings/format/format_positioned.rs b/tabled/src/settings/format/format_positioned.rs
index 00bd4a4..cca05ea 100644
--- a/tabled/src/settings/format/format_positioned.rs
+++ b/tabled/src/settings/format/format_positioned.rs
@@ -24,6 +24,11 @@ where
         let count_cols = records.count_columns();
 
         for pos in entity.iter(count_rows, count_cols) {
+            let is_valid_pos = pos.0 < count_rows && pos.1 < count_cols;
+            if !is_valid_pos {
+                continue;
+            }
+
             let content = records.get_text(pos);
             let content = (self.0)(content, pos);
             records.set(pos, content);
diff --git a/tabled/src/settings/height/cell_height_increase.rs b/tabled/src/settings/height/cell_height_increase.rs
index acacbcc..05c9e0f 100644
--- a/tabled/src/settings/height/cell_height_increase.rs
+++ b/tabled/src/settings/height/cell_height_increase.rs
@@ -53,6 +53,11 @@ where
         let count_columns = records.count_columns();
 
         for pos in entity.iter(count_rows, count_columns) {
+            let is_valid_pos = pos.0 < count_rows && pos.1 < count_columns;
+            if !is_valid_pos {
+                continue;
+            }
+
             let text = records.get_text(pos);
 
             let cell_height = count_lines(text);
diff --git a/tabled/src/settings/height/cell_height_limit.rs b/tabled/src/settings/height/cell_height_limit.rs
index c085a52..1c2f53c 100644
--- a/tabled/src/settings/height/cell_height_limit.rs
+++ b/tabled/src/settings/height/cell_height_limit.rs
@@ -53,6 +53,11 @@ where
         let count_columns = records.count_columns();
 
         for pos in entity.iter(count_rows, count_columns) {
+            let is_valid_pos = pos.0 < count_rows && pos.1 < count_columns;
+            if !is_valid_pos {
+                continue;
+            }
+
             let text = records.get_text(pos);
             let count_lines = count_lines(text);
 
diff --git a/tabled/src/settings/object/columns.rs b/tabled/src/settings/object/columns.rs
index 7f25f7d..bcbe2ac 100644
--- a/tabled/src/settings/object/columns.rs
+++ b/tabled/src/settings/object/columns.rs
@@ -197,7 +197,7 @@ impl Iterator for ColumnsIter {
     type Item = Entity;
 
     fn next(&mut self) -> Option<Self::Item> {
-        if self.start == self.end {
+        if self.start >= self.end {
             return None;
         }
 
diff --git a/tabled/src/settings/object/mod.rs b/tabled/src/settings/object/mod.rs
index be3a50a..46893c7 100644
--- a/tabled/src/settings/object/mod.rs
+++ b/tabled/src/settings/object/mod.rs
@@ -478,6 +478,15 @@ mod tests {
 
     use super::*;
 
+    #[test]
+    fn cell_test() {
+        assert_eq!(vec_cells((0, 0), 2, 3), [Entity::Cell(0, 0)]);
+        assert_eq!(vec_cells((1, 1), 2, 3), [Entity::Cell(1, 1)]);
+        assert_eq!(vec_cells((1, 1), 0, 0), [Entity::Cell(1, 1)]);
+        assert_eq!(vec_cells((1, 100), 2, 3), [Entity::Cell(1, 100)]);
+        assert_eq!(vec_cells((100, 1), 2, 3), [Entity::Cell(100, 1)]);
+    }
+
     #[test]
     fn columns_test() {
         assert_eq!(
@@ -490,6 +499,7 @@ mod tests {
         );
         assert_eq!(vec_cells(Columns::new(2..), 2, 3), [Entity::Column(2)]);
         assert_eq!(vec_cells(Columns::new(3..), 2, 3), []);
+        assert_eq!(vec_cells(Columns::new(3..), 0, 0), []);
         assert_eq!(vec_cells(Columns::new(0..1), 2, 3), [Entity::Column(0)]);
         assert_eq!(vec_cells(Columns::new(1..2), 2, 3), [Entity::Column(1)]);
         assert_eq!(vec_cells(Columns::new(2..3), 2, 3), [Entity::Column(2)]);
@@ -544,6 +554,7 @@ mod tests {
         );
         assert_eq!(vec_cells(Rows::new(1..), 2, 3), [Entity::Row(1)]);
         assert_eq!(vec_cells(Rows::new(2..), 2, 3), []);
+        assert_eq!(vec_cells(Rows::new(2..), 0, 0), []);
         assert_eq!(vec_cells(Rows::new(0..1), 2, 3), [Entity::Row(0)],);
         assert_eq!(vec_cells(Rows::new(1..2), 2, 3), [Entity::Row(1)],);
         assert_eq!(vec_cells(Rows::new(..), 0, 0), []);
diff --git a/tabled/src/settings/object/rows.rs b/tabled/src/settings/object/rows.rs
index a1c251f..b32e79a 100644
--- a/tabled/src/settings/object/rows.rs
+++ b/tabled/src/settings/object/rows.rs
@@ -201,7 +201,7 @@ impl Iterator for RowsIter {
     type Item = Entity;
 
     fn next(&mut self) -> Option<Self::Item> {
-        if self.start == self.end {
+        if self.start >= self.end {
             return None;
         }
 
diff --git a/tabled/src/settings/panel/horizontal_panel.rs b/tabled/src/settings/panel/horizontal_panel.rs
index 89bc741..987c2dc 100644
--- a/tabled/src/settings/panel/horizontal_panel.rs
+++ b/tabled/src/settings/panel/horizontal_panel.rs
@@ -31,6 +31,12 @@ where
             return;
         }
 
+        let is_intersect_vertical_span = (0..records.count_columns())
+            .any(|col| cfg.is_cell_covered_by_row_span((self.row, col)));
+        if is_intersect_vertical_span {
+            return;
+        }
+
         move_rows_aside(records, self.row);
         move_row_spans(cfg, self.row);
 
diff --git a/tabled/src/settings/panel/vertical_panel.rs b/tabled/src/settings/panel/vertical_panel.rs
index cf30e2d..9eb7c8d 100644
--- a/tabled/src/settings/panel/vertical_panel.rs
+++ b/tabled/src/settings/panel/vertical_panel.rs
@@ -34,6 +34,14 @@ where
             return;
         }
 
+        let is_intersect_horizontal_span = (0..=records.count_rows())
+            .any(|row| cfg.is_cell_covered_by_column_span((row, self.col)));
+
+        println!("{is_intersect_horizontal_span} {}", self.col);
+        if is_intersect_horizontal_span {
+            return;
+        }
+
         move_columns_aside(records, self.col);
         move_column_spans(cfg, self.col);
 
diff --git a/tabled/src/settings/style/raw_style.rs b/tabled/src/settings/style/raw_style.rs
index d8d1b64..8c5cbe0 100644
--- a/tabled/src/settings/style/raw_style.rs
+++ b/tabled/src/settings/style/raw_style.rs
@@ -241,6 +241,11 @@ impl RawStyle {
         self
     }
 
+    /// Insert a horizontal line to a specific row location.
+    pub fn get_horizontal(&self, row: usize) -> Option<Line> {
+        self.horizontals.get(&row).cloned()
+    }
+
     /// Set vertical border lines.
     ///
     /// # Example
@@ -356,6 +361,11 @@ impl RawStyle {
             right_bottom_corner: self.borders.bottom_right,
         })
     }
+
+    /// Returns an general borders configuration of the style.
+    pub fn get_borders(&self) -> Borders<char> {
+        self.borders
+    }
 }
 
 impl From<Borders<char>> for RawStyle {
diff --git a/tabled/src/settings/width/min_width.rs b/tabled/src/settings/width/min_width.rs
index 87b6d0f..203e6ce 100644
--- a/tabled/src/settings/width/min_width.rs
+++ b/tabled/src/settings/width/min_width.rs
@@ -115,6 +115,11 @@ where
         let count_columns = records.count_columns();
 
         for pos in entity.iter(count_rows, count_columns) {
+            let is_valid_pos = pos.0 < count_rows && pos.1 < count_columns;
+            if !is_valid_pos {
+                continue;
+            }
+
             let cell = records.get_text(pos);
             let cell_width = string_width_multiline(cell);
             if cell_width >= width {
diff --git a/tabled/src/settings/width/truncate.rs b/tabled/src/settings/width/truncate.rs
index 23dd152..b7f1ac6 100644
--- a/tabled/src/settings/width/truncate.rs
+++ b/tabled/src/settings/width/truncate.rs
@@ -205,6 +205,11 @@ where
         let colorize = need_suffix_color_preservation(&self.suffix);
 
         for pos in entity.iter(count_rows, count_columns) {
+            let is_valid_pos = pos.0 < count_rows && pos.1 < count_columns;
+            if !is_valid_pos {
+                continue;
+            }
+
             let text = records.get_text(pos);
 
             let cell_width = string_width_multiline(text);
diff --git a/tabled/src/settings/width/wrap.rs b/tabled/src/settings/width/wrap.rs
index 005f7ac..def0089 100644
--- a/tabled/src/settings/width/wrap.rs
+++ b/tabled/src/settings/width/wrap.rs
@@ -134,6 +134,11 @@ where
         let count_columns = records.count_columns();
 
         for pos in entity.iter(count_rows, count_columns) {
+            let is_valid_pos = pos.0 < records.count_rows() && pos.1 < records.count_columns();
+            if !is_valid_pos {
+                continue;
+            }
+
             let text = records.get_text(pos);
             let cell_width = string_width_multiline(text);
             if cell_width <= width {
diff --git a/tabled/src/tables/compact.rs b/tabled/src/tables/compact.rs
index a9435ea..d41a17e 100644
--- a/tabled/src/tables/compact.rs
+++ b/tabled/src/tables/compact.rs
@@ -184,6 +184,10 @@ impl<I, D> CompactTable<I, D> {
         self
     }
 
+    /// Returns a table config.
+    pub fn get_config(&self) -> &CompactConfig {
+        &self.cfg
+    }
     /// Format table into [fmt::Write]er.
     pub fn fmt<W>(self, writer: W) -> fmt::Result
     where
@@ -232,13 +236,6 @@ impl<I, D> CompactTable<I, D> {
     }
 }
 
-impl CompactTable<(), ()> {
-    /// Return a default config.
-    pub fn config() -> CompactConfig {
-        create_config()
-    }
-}
-
 impl<T, const ROWS: usize, const COLS: usize> From<[[T; COLS]; ROWS]>
     for CompactTable<[[T; COLS]; ROWS], ConstDimension<COLS, ROWS>>
 where
@@ -298,3 +295,9 @@ const fn create_config() -> CompactConfig {
         .set_alignment_horizontal(AlignmentHorizontal::Left)
         .set_borders(*Style::ascii().get_borders())
 }
+
+impl<R, D> TableOption<R, D, CompactConfig> for CompactConfig {
+    fn change(&mut self, _: &mut R, cfg: &mut CompactConfig, _: &mut D) {
+        *cfg = *self;
+    }
+}
diff --git a/tabled/src/tables/extended.rs b/tabled/src/tables/extended.rs
index 3003489..a22fd46 100644
--- a/tabled/src/tables/extended.rs
+++ b/tabled/src/tables/extended.rs
@@ -56,7 +56,7 @@ use crate::Tabled;
 /// `ExtendedTable` display data in a 'expanded display mode' from postgresql.
 /// It may be useful for a large data sets with a lot of fields.
 ///
-/// See 'Examples' in <https://www.postgresql.org/docs/current/app-psql.html.>.
+/// See 'Examples' in <https://www.postgresql.org/docs/current/app-psql.html>.
 ///
 /// It escapes strings to resolve a multi-line ones.
 /// Because of that ANSI sequences will be not be rendered too so colores will not be showed.
diff --git a/tabled/src/tables/table.rs b/tabled/src/tables/table.rs
index 158b90d..3b7fe93 100644
--- a/tabled/src/tables/table.rs
+++ b/tabled/src/tables/table.rs
@@ -1,12 +1,14 @@
 //! This module contains a main table representation [`Table`].
 
+use core::ops::DerefMut;
 use std::{borrow::Cow, collections::HashMap, fmt, iter::FromIterator};
 
 use crate::{
     builder::Builder,
     grid::{
         config::{
-            AlignmentHorizontal, ColoredConfig, Entity, Formatting, Indent, Sides, SpannedConfig,
+            AlignmentHorizontal, ColoredConfig, CompactConfig, Entity, Formatting, Indent, Sides,
+            SpannedConfig,
         },
         dimension::{CompleteDimension, PeekableDimension},
         dimension::{Dimension, Estimate},
@@ -290,6 +292,18 @@ impl From<Builder> for Table {
     }
 }
 
+impl<R, D> TableOption<R, D, ColoredConfig> for CompactConfig {
+    fn change(&mut self, _: &mut R, cfg: &mut ColoredConfig, _: &mut D) {
+        *cfg.deref_mut() = (*self).into();
+    }
+}
+
+impl<R, D> TableOption<R, D, ColoredConfig> for ColoredConfig {
+    fn change(&mut self, _: &mut R, cfg: &mut ColoredConfig, _: &mut D) {
+        *cfg = self.clone();
+    }
+}
+
 fn convert_fmt_alignment(alignment: fmt::Alignment) -> AlignmentHorizontal {
     match alignment {
         fmt::Alignment::Left => AlignmentHorizontal::Left,
diff --git a/tabled_derive/src/lib.rs b/tabled_derive/src/lib.rs
index e50a145..e1fa632 100644
--- a/tabled_derive/src/lib.rs
+++ b/tabled_derive/src/lib.rs
@@ -45,7 +45,7 @@ fn impl_tabled(ast: &DeriveInput) -> TokenStream {
     let name = &ast.ident;
     let (impl_generics, ty_generics, where_clause) = ast.generics.split_for_impl();
     let expanded = quote! {
-        impl #impl_generics Tabled for #name #ty_generics #where_clause {
+        impl #impl_generics ::tabled::Tabled for #name #ty_generics #where_clause {
             const LENGTH: usize = #length;
 
             fn fields(&self) -> Vec<::std::borrow::Cow<'_, str>> {


Test patch:
diff --git a/json_to_table/tests/test_orientation_modes.rs b/json_to_table/tests/test_orientation_modes.rs
index 14ed9cc..d7600d8 100644
--- a/json_to_table/tests/test_orientation_modes.rs
+++ b/json_to_table/tests/test_orientation_modes.rs
@@ -1,6 +1,6 @@
 use json_to_table::{json_to_table, Orientation};
 use serde_json::json;
-use tabled::{settings::Style, Table};
+use tabled::settings::Style;
 
 #[test]
 fn orientation_test_1() {
@@ -157,146 +157,168 @@ fn orientation_visitor_test() {
         }}
     );
 
-    let mut i = false;
-    let table = Table::from({
-        let mut table = json_to_table(&value).set_mode_visitor(|_| {
-            if i {
-                i = false;
-                Orientation::Horizontal
-            } else {
-                i = true;
-                Orientation::Vertical
-            }
-        });
-
-        table.set_style(Style::modern());
-
-        table
-    })
-    .to_string();
+    let table = json_to_table(&value).set_style(Style::modern()).to_string();
 
     assert_eq!(
         table,
         concat!(
-            "┌──────┬────────────────────────────────────────────────────────────────┐\n",
-            "│ menu │ ┌──────────────┬─────────────────────────────────────────────┐ │\n",
-            "│      │ │ header       │ items                                       │ │\n",
-            "│      │ ├──────────────┼─────────────────────────────────────────────┤ │\n",
-            "│      │ │  SVG Viewer  │ ┌─────────────────────────────────────────┐ │ │\n",
-            "│      │ │              │ │ ┌────────┐                              │ │ │\n",
-            "│      │ │              │ │ │ id     │                              │ │ │\n",
-            "│      │ │              │ │ ├────────┤                              │ │ │\n",
-            "│      │ │              │ │ │  Open  │                              │ │ │\n",
-            "│      │ │              │ │ └────────┘                              │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬────────────┐                  │ │ │\n",
-            "│      │ │              │ │ │ id    │  OpenNew   │                  │ │ │\n",
-            "│      │ │              │ │ ├───────┼────────────┤                  │ │ │\n",
-            "│      │ │              │ │ │ label │  Open New  │                  │ │ │\n",
-            "│      │ │              │ │ └───────┴────────────┘                  │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │                                         │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌──────────┬───────────┐                │ │ │\n",
-            "│      │ │              │ │ │ id       │ label     │                │ │ │\n",
-            "│      │ │              │ │ ├──────────┼───────────┤                │ │ │\n",
-            "│      │ │              │ │ │  ZoomIn  │  Zoom In  │                │ │ │\n",
-            "│      │ │              │ │ └──────────┴───────────┘                │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬────────────┐                  │ │ │\n",
-            "│      │ │              │ │ │ id    │  ZoomOut   │                  │ │ │\n",
-            "│      │ │              │ │ ├───────┼────────────┤                  │ │ │\n",
-            "│      │ │              │ │ │ label │  Zoom Out  │                  │ │ │\n",
-            "│      │ │              │ │ └───────┴────────────┘                  │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌────────────────┬─────────────────┐    │ │ │\n",
-            "│      │ │              │ │ │ id             │ label           │    │ │ │\n",
-            "│      │ │              │ │ ├────────────────┼─────────────────┤    │ │ │\n",
-            "│      │ │              │ │ │  OriginalView  │  Original View  │    │ │ │\n",
-            "│      │ │              │ │ └────────────────┴─────────────────┘    │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │                                         │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌────┬───────────┐                      │ │ │\n",
-            "│      │ │              │ │ │ id │  Quality  │                      │ │ │\n",
-            "│      │ │              │ │ └────┴───────────┘                      │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌─────────┐                             │ │ │\n",
-            "│      │ │              │ │ │ id      │                             │ │ │\n",
-            "│      │ │              │ │ ├─────────┤                             │ │ │\n",
-            "│      │ │              │ │ │  Pause  │                             │ │ │\n",
-            "│      │ │              │ │ └─────────┘                             │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌────┬────────┐                         │ │ │\n",
-            "│      │ │              │ │ │ id │  Mute  │                         │ │ │\n",
-            "│      │ │              │ │ └────┴────────┘                         │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │                                         │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌────────┬───────────┐                  │ │ │\n",
-            "│      │ │              │ │ │ id     │ label     │                  │ │ │\n",
-            "│      │ │              │ │ ├────────┼───────────┤                  │ │ │\n",
-            "│      │ │              │ │ │  Find  │  Find...  │                  │ │ │\n",
-            "│      │ │              │ │ └────────┴───────────┘                  │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬──────────────┐                │ │ │\n",
-            "│      │ │              │ │ │ id    │  FindAgain   │                │ │ │\n",
-            "│      │ │              │ │ ├───────┼──────────────┤                │ │ │\n",
-            "│      │ │              │ │ │ label │  Find Again  │                │ │ │\n",
-            "│      │ │              │ │ └───────┴──────────────┘                │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌────────┐                              │ │ │\n",
-            "│      │ │              │ │ │ id     │                              │ │ │\n",
-            "│      │ │              │ │ ├────────┤                              │ │ │\n",
-            "│      │ │              │ │ │  Copy  │                              │ │ │\n",
-            "│      │ │              │ │ └────────┘                              │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬──────────────┐                │ │ │\n",
-            "│      │ │              │ │ │ id    │  CopyAgain   │                │ │ │\n",
-            "│      │ │              │ │ ├───────┼──────────────┤                │ │ │\n",
-            "│      │ │              │ │ │ label │  Copy Again  │                │ │ │\n",
-            "│      │ │              │ │ └───────┴──────────────┘                │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────────┬────────────┐              │ │ │\n",
-            "│      │ │              │ │ │ id        │ label      │              │ │ │\n",
-            "│      │ │              │ │ ├───────────┼────────────┤              │ │ │\n",
-            "│      │ │              │ │ │  CopySVG  │  Copy SVG  │              │ │ │\n",
-            "│      │ │              │ │ └───────────┴────────────┘              │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬────────────┐                  │ │ │\n",
-            "│      │ │              │ │ │ id    │  ViewSVG   │                  │ │ │\n",
-            "│      │ │              │ │ ├───────┼────────────┤                  │ │ │\n",
-            "│      │ │              │ │ │ label │  View SVG  │                  │ │ │\n",
-            "│      │ │              │ │ └───────┴────────────┘                  │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌──────────────┬───────────────┐        │ │ │\n",
-            "│      │ │              │ │ │ id           │ label         │        │ │ │\n",
-            "│      │ │              │ │ ├──────────────┼───────────────┤        │ │ │\n",
-            "│      │ │              │ │ │  ViewSource  │  View Source  │        │ │ │\n",
-            "│      │ │              │ │ └──────────────┴───────────────┘        │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬───────────┐                   │ │ │\n",
-            "│      │ │              │ │ │ id    │  SaveAs   │                   │ │ │\n",
-            "│      │ │              │ │ ├───────┼───────────┤                   │ │ │\n",
-            "│      │ │              │ │ │ label │  Save As  │                   │ │ │\n",
-            "│      │ │              │ │ └───────┴───────────┘                   │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │                                         │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌────────┐                              │ │ │\n",
-            "│      │ │              │ │ │ id     │                              │ │ │\n",
-            "│      │ │              │ │ ├────────┤                              │ │ │\n",
-            "│      │ │              │ │ │  Help  │                              │ │ │\n",
-            "│      │ │              │ │ └────────┘                              │ │ │\n",
-            "│      │ │              │ ├─────────────────────────────────────────┤ │ │\n",
-            "│      │ │              │ │ ┌───────┬─────────────────────────────┐ │ │ │\n",
-            "│      │ │              │ │ │ id    │  About                      │ │ │ │\n",
-            "│      │ │              │ │ ├───────┼─────────────────────────────┤ │ │ │\n",
-            "│      │ │              │ │ │ label │  About Adobe CVG Viewer...  │ │ │ │\n",
-            "│      │ │              │ │ └───────┴─────────────────────────────┘ │ │ │\n",
-            "│      │ │              │ └─────────────────────────────────────────┘ │ │\n",
-            "│      │ └──────────────┴─────────────────────────────────────────────┘ │\n",
-            "└──────┴────────────────────────────────────────────────────────────────┘",
+            "┌──────┬──────────────────────────────────────────────────────────┐\n",
+            "│ menu │ ┌────────┬─────────────────────────────────────────────┐ │\n",
+            "│      │ │ header │  SVG Viewer                                 │ │\n",
+            "│      │ ├────────┼─────────────────────────────────────────────┤ │\n",
+            "│      │ │ items  │ ┌─────────────────────────────────────────┐ │ │\n",
+            "│      │ │        │ │ ┌────┬────────┐                         │ │ │\n",
+            "│      │ │        │ │ │ id │  Open  │                         │ │ │\n",
+            "│      │ │        │ │ └────┴────────┘                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬────────────┐                  │ │ │\n",
+            "│      │ │        │ │ │ id    │  OpenNew   │                  │ │ │\n",
+            "│      │ │        │ │ ├───────┼────────────┤                  │ │ │\n",
+            "│      │ │        │ │ │ label │  Open New  │                  │ │ │\n",
+            "│      │ │        │ │ └───────┴────────────┘                  │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │                                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬───────────┐                   │ │ │\n",
+            "│      │ │        │ │ │ id    │  ZoomIn   │                   │ │ │\n",
+            "│      │ │        │ │ ├───────┼───────────┤                   │ │ │\n",
+            "│      │ │        │ │ │ label │  Zoom In  │                   │ │ │\n",
+            "│      │ │        │ │ └───────┴───────────┘                   │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬────────────┐                  │ │ │\n",
+            "│      │ │        │ │ │ id    │  ZoomOut   │                  │ │ │\n",
+            "│      │ │        │ │ ├───────┼────────────┤                  │ │ │\n",
+            "│      │ │        │ │ │ label │  Zoom Out  │                  │ │ │\n",
+            "│      │ │        │ │ └───────┴────────────┘                  │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬─────────────────┐             │ │ │\n",
+            "│      │ │        │ │ │ id    │  OriginalView   │             │ │ │\n",
+            "│      │ │        │ │ ├───────┼─────────────────┤             │ │ │\n",
+            "│      │ │        │ │ │ label │  Original View  │             │ │ │\n",
+            "│      │ │        │ │ └───────┴─────────────────┘             │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │                                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌────┬───────────┐                      │ │ │\n",
+            "│      │ │        │ │ │ id │  Quality  │                      │ │ │\n",
+            "│      │ │        │ │ └────┴───────────┘                      │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌────┬─────────┐                        │ │ │\n",
+            "│      │ │        │ │ │ id │  Pause  │                        │ │ │\n",
+            "│      │ │        │ │ └────┴─────────┘                        │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌────┬────────┐                         │ │ │\n",
+            "│      │ │        │ │ │ id │  Mute  │                         │ │ │\n",
+            "│      │ │        │ │ └────┴────────┘                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │                                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬───────────┐                   │ │ │\n",
+            "│      │ │        │ │ │ id    │  Find     │                   │ │ │\n",
+            "│      │ │        │ │ ├───────┼───────────┤                   │ │ │\n",
+            "│      │ │        │ │ │ label │  Find...  │                   │ │ │\n",
+            "│      │ │        │ │ └───────┴───────────┘                   │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬──────────────┐                │ │ │\n",
+            "│      │ │        │ │ │ id    │  FindAgain   │                │ │ │\n",
+            "│      │ │        │ │ ├───────┼──────────────┤                │ │ │\n",
+            "│      │ │        │ │ │ label │  Find Again  │                │ │ │\n",
+            "│      │ │        │ │ └───────┴──────────────┘                │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌────┬────────┐                         │ │ │\n",
+            "│      │ │        │ │ │ id │  Copy  │                         │ │ │\n",
+            "│      │ │        │ │ └────┴────────┘                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬──────────────┐                │ │ │\n",
+            "│      │ │        │ │ │ id    │  CopyAgain   │                │ │ │\n",
+            "│      │ │        │ │ ├───────┼──────────────┤                │ │ │\n",
+            "│      │ │        │ │ │ label │  Copy Again  │                │ │ │\n",
+            "│      │ │        │ │ └───────┴──────────────┘                │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬────────────┐                  │ │ │\n",
+            "│      │ │        │ │ │ id    │  CopySVG   │                  │ │ │\n",
+            "│      │ │        │ │ ├───────┼────────────┤                  │ │ │\n",
+            "│      │ │        │ │ │ label │  Copy SVG  │                  │ │ │\n",
+            "│      │ │        │ │ └───────┴────────────┘                  │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬────────────┐                  │ │ │\n",
+            "│      │ │        │ │ │ id    │  ViewSVG   │                  │ │ │\n",
+            "│      │ │        │ │ ├───────┼────────────┤                  │ │ │\n",
+            "│      │ │        │ │ │ label │  View SVG  │                  │ │ │\n",
+            "│      │ │        │ │ └───────┴────────────┘                  │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬───────────────┐               │ │ │\n",
+            "│      │ │        │ │ │ id    │  ViewSource   │               │ │ │\n",
+            "│      │ │        │ │ ├───────┼───────────────┤               │ │ │\n",
+            "│      │ │        │ │ │ label │  View Source  │               │ │ │\n",
+            "│      │ │        │ │ └───────┴───────────────┘               │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬───────────┐                   │ │ │\n",
+            "│      │ │        │ │ │ id    │  SaveAs   │                   │ │ │\n",
+            "│      │ │        │ │ ├───────┼───────────┤                   │ │ │\n",
+            "│      │ │        │ │ │ label │  Save As  │                   │ │ │\n",
+            "│      │ │        │ │ └───────┴───────────┘                   │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │                                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌────┬────────┐                         │ │ │\n",
+            "│      │ │        │ │ │ id │  Help  │                         │ │ │\n",
+            "│      │ │        │ │ └────┴────────┘                         │ │ │\n",
+            "│      │ │        │ ├─────────────────────────────────────────┤ │ │\n",
+            "│      │ │        │ │ ┌───────┬─────────────────────────────┐ │ │ │\n",
+            "│      │ │        │ │ │ id    │  About                      │ │ │ │\n",
+            "│      │ │        │ │ ├───────┼─────────────────────────────┤ │ │ │\n",
+            "│      │ │        │ │ │ label │  About Adobe CVG Viewer...  │ │ │ │\n",
+            "│      │ │        │ │ └───────┴─────────────────────────────┘ │ │ │\n",
+            "│      │ │        │ └─────────────────────────────────────────┘ │ │\n",
+            "│      │ └────────┴─────────────────────────────────────────────┘ │\n",
+            "└──────┴──────────────────────────────────────────────────────────┘",
         )
     );
 }
+
+// #[test]
+// fn orientation_collapse_test_1() {
+//     let value = json!(
+//         {"widget": {
+//             "debug": "on",
+//             "text": {
+//                 "data": ["Click Here", "asda", "123132"],
+//                 "size": 36,
+//                 "style": "bold",
+//                 "name": "text1",
+//                 "hOffset": 250,
+//                 "vOffset": 100,
+//                 "alignment": "center",
+//                 "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
+//             }
+//         }}
+//     );
+
+//     let table = json_to_table(&value)
+//         .set_style(Style::extended())
+//         .collapse()
+//         .set_object_mode(Orientation::Vertical)
+//         .to_string();
+
+//     println!("{table}");
+
+//     assert_eq!(
+//         table,
+//         concat!(
+//             "╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗\n",
+//             "║ widget                                                                                                                                                                                                                                                                   ║\n",
+//             "╠══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣\n",
+//             "║ ╔═══════╦═══════════════════════════════════════════════════════════════╦══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╦═══════════════════════════════════════════════════════════════════╗ ║\n",
+//             "║ ║ debug ║ image                                                         ║ text                                                                                                                     ║ window                                                            ║ ║\n",
+//             "║ ╠═══════╬═══════════════════════════════════════════════════════════════╬══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╬═══════════════════════════════════════════════════════════════════╣ ║\n",
+//             "║ ║  on   ║ ╔═══════════╦═════════╦════════╦══════════════════╦═════════╗ ║ ╔═══════════╦══════════════╦═════════╦═════════╦═════════════════════════════════════════════╦══════╦════════╦═════════╗ ║ ╔════════╦═══════════════╦══════════════════════════════╦═══════╗ ║ ║\n",
+//             "║ ║       ║ ║ alignment ║ hOffset ║ name   ║ src              ║ vOffset ║ ║ ║ alignment ║ data         ║ hOffset ║ name    ║ onMouseUp                                   ║ size ║ style  ║ vOffset ║ ║ ║ height ║ name          ║ title                        ║ width ║ ║ ║\n",
+//             "║ ║       ║ ╠═══════════╬═════════╬════════╬══════════════════╬═════════╣ ║ ╠═══════════╬══════════════╬═════════╬═════════╬═════════════════════════════════════════════╬══════╬════════╬═════════╣ ║ ╠════════╬═══════════════╬══════════════════════════════╬═══════╣ ║ ║\n",
+//             "║ ║       ║ ║  center   ║  250    ║  sun1  ║  Images/Sun.png  ║  250    ║ ║ ║  center   ║  Click Here  ║  250    ║  text1  ║  sun1.opacity = (sun1.opacity / 100) * 90;  ║  36  ║  bold  ║  100    ║ ║ ║  500   ║  main_window  ║  Sample Konfabulator Widget  ║  500  ║ ║ ║\n",
+//             "║ ║       ║ ╚═══════════╩═════════╩════════╩══════════════════╩═════════╝ ║ ╚═══════════╩══════════════╩═════════╩═════════╩═════════════════════════════════════════════╩══════╩════════╩═════════╝ ║ ╚════════╩═══════════════╩══════════════════════════════╩═══════╝ ║ ║\n",
+//             "║ ╚═══════╩═══════════════════════════════════════════════════════════════╩══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╩═══════════════════════════════════════════════════════════════════╝ ║\n",
+//             "╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝",
+//         )
+//     );
+// }
diff --git a/tabled/tests/compact_table.rs b/tabled/tests/compact_table.rs
index dc6f01b..ffc973f 100644
--- a/tabled/tests/compact_table.rs
+++ b/tabled/tests/compact_table.rs
@@ -3,7 +3,10 @@
 mod util;
 
 use tabled::{
-    grid::{dimension::CompactGridDimension, dimension::Estimate, records::IterRecords},
+    grid::{
+        config::CompactConfig, dimension::CompactGridDimension, dimension::Estimate,
+        records::IterRecords,
+    },
     tables::CompactTable,
 };
 use util::{create_matrix, test_table};
@@ -19,7 +22,7 @@ test_table!(
     {
         let data = create_matrix::<3, 3>();
         let mut dims = CompactGridDimension::default();
-        dims.estimate(IterRecords::new(&data, 3, None), &CompactTable::config());
+        dims.estimate(IterRecords::new(&data, 3, None), &CompactConfig::default());
         CompactTable::with_dimension(data, dims).columns(3).to_string()
     },
     "+-----+-----+-----+"
diff --git a/tabled/tests/derive_test.rs b/tabled/tests/derive_test.rs
index 34ec8ca..d27e43e 100644
--- a/tabled/tests/derive_test.rs
+++ b/tabled/tests/derive_test.rs
@@ -1080,3 +1080,11 @@ fn test_skip_enum_0() {
     assert_eq!(Letters::Consonant('c').fields(), vec!["", "+"]);
     assert_eq!(Letters::Digit.fields(), vec!["", ""]);
 }
+
+mod __ {
+    #[test]
+    fn dont_import_the_trait() {
+        #[derive(tabled::Tabled)]
+        struct __;
+    }
+}