Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,26 @@

### Added

- Added `Behavior.occlusionInsets` to account for persistent overlay UI that visually covers the list viewport.

### Removed

### Changed

### Misc

- Added a development demo for validating keyboard avoidance with a floating bottom overlay and text fields.

### Internal

# Past Releases

# 17.2.0 - 2026-06-01

### Added

- Added `Behavior.occlusionInsets` to account for persistent overlay UI that visually covers the list viewport.

### Misc

- Added a development demo for validating keyboard avoidance with a floating bottom overlay and text fields.

# 17.1.0 - 2026-05-29

### Added
Expand Down
6 changes: 3 additions & 3 deletions docs/BlueprintLists/Functions.html
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ <h4>Declaration</h4>
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">@inline(__always)</span>
<pre class="highlight swift"><code><span class="kd">@inline</span><span class="p">(</span><span class="n">__always</span><span class="p">)</span>
<span class="kd">public</span> <span class="kd">func</span> <span class="nf">preconditionFailure</span><span class="p">(</span>
<span class="n">_</span> <span class="nv">message</span><span class="p">:</span> <span class="kd">@autoclosure</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">String</span> <span class="o">=</span> <span class="kt">String</span><span class="p">(),</span>
<span class="nv">file</span><span class="p">:</span> <span class="kt">StaticString</span> <span class="o">=</span> <span class="kd">#file</span><span class="p">,</span>
Expand Down Expand Up @@ -329,7 +329,7 @@ <h3 id='note' class='heading'>Note</h3>
<p>If your item is to be used in more than one place, it is recommended that you
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
<h3 id='example' class='heading'>Example</h3>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="err">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="k">in</span>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="p">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="k">in</span>
<span class="n">lhs</span><span class="o">.</span><span class="n">value</span> <span class="o">!=</span> <span class="n">rhs</span><span class="o">.</span><span class="n">value</span>
<span class="p">}</span> <span class="nv">element</span><span class="p">:</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<span class="kt">PodcastElement</span><span class="p">(</span><span class="nv">podcast</span><span class="p">:</span> <span class="n">podcast</span><span class="p">)</span>
Expand Down Expand Up @@ -392,7 +392,7 @@ <h3 id='note' class='heading'>Note</h3>
<p>If your item is to be used in more than one place, it is recommended that you
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
<h3 id='example' class='heading'>Example</h3>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="err">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="p">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<span class="kt">PodcastElement</span><span class="p">(</span><span class="nv">podcast</span><span class="p">:</span> <span class="n">podcast</span><span class="p">)</span>
<span class="p">}</span> <span class="nv">background</span><span class="p">:</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<span class="kt">Box</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ <h4>Declaration</h4>
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="err">`</span><span class="k">Self</span><span class="err">`</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="p">`</span><span class="nv">Self</span><span class="p">`)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>

</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion docs/BlueprintLists/Structs/ElementItemContent.html
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ <h4>Declaration</h4>
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="err">`</span><span class="k">Self</span><span class="err">`</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="p">`</span><span class="nv">Self</span><span class="p">`)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>

</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ <h4>Declaration</h4>
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">@inline(__always)</span>
<pre class="highlight swift"><code><span class="kd">@inline</span><span class="p">(</span><span class="n">__always</span><span class="p">)</span>
<span class="kd">public</span> <span class="kd">func</span> <span class="nf">preconditionFailure</span><span class="p">(</span>
<span class="n">_</span> <span class="nv">message</span><span class="p">:</span> <span class="kd">@autoclosure</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">String</span> <span class="o">=</span> <span class="kt">String</span><span class="p">(),</span>
<span class="nv">file</span><span class="p">:</span> <span class="kt">StaticString</span> <span class="o">=</span> <span class="kd">#file</span><span class="p">,</span>
Expand Down Expand Up @@ -329,7 +329,7 @@ <h3 id='note' class='heading'>Note</h3>
<p>If your item is to be used in more than one place, it is recommended that you
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
<h3 id='example' class='heading'>Example</h3>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="err">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="k">in</span>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="p">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="k">in</span>
<span class="n">lhs</span><span class="o">.</span><span class="n">value</span> <span class="o">!=</span> <span class="n">rhs</span><span class="o">.</span><span class="n">value</span>
<span class="p">}</span> <span class="nv">element</span><span class="p">:</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<span class="kt">PodcastElement</span><span class="p">(</span><span class="nv">podcast</span><span class="p">:</span> <span class="n">podcast</span><span class="p">)</span>
Expand Down Expand Up @@ -392,7 +392,7 @@ <h3 id='note' class='heading'>Note</h3>
<p>If your item is to be used in more than one place, it is recommended that you
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
<h3 id='example' class='heading'>Example</h3>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="err">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<pre class="highlight swift"><code><span class="kt">ElementItem</span><span class="p">(</span><span class="n">podcast</span><span class="p">,</span> <span class="nv">id</span><span class="p">:</span> <span class="p">\</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<span class="kt">PodcastElement</span><span class="p">(</span><span class="nv">podcast</span><span class="p">:</span> <span class="n">podcast</span><span class="p">)</span>
<span class="p">}</span> <span class="nv">background</span><span class="p">:</span> <span class="p">{</span> <span class="n">podcast</span><span class="p">,</span> <span class="n">info</span> <span class="k">in</span>
<span class="kt">Box</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ <h4>Declaration</h4>
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="err">`</span><span class="k">Self</span><span class="err">`</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="p">`</span><span class="nv">Self</span><span class="p">`)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>

</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ <h4>Declaration</h4>
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="err">`</span><span class="k">Self</span><span class="err">`</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">isEquivalent</span><span class="p">(</span><span class="n">to</span> <span class="nv">other</span><span class="p">:</span> <span class="p">`</span><span class="nv">Self</span><span class="p">`)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>

</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,18 @@ <h3 id='highly-customizable' class='heading'>Highly Customizable</h3>
<span class="p">{</span>
<span class="kd">public</span> <span class="k">var</span> <span class="nv">keyboardDismissMode</span> <span class="p">:</span> <span class="kt">UIScrollView</span><span class="o">.</span><span class="kt">KeyboardDismissMode</span>

<span class="kd">public</span> <span class="k">var</span> <span class="nv">keyboardAdjustmentMode</span> <span class="p">:</span> <span class="kt">KeyboardAdjustmentMode</span>

<span class="kd">public</span> <span class="k">var</span> <span class="nv">occlusionInsets</span> <span class="p">:</span> <span class="kt">UIEdgeInsets</span>

<span class="kd">public</span> <span class="k">var</span> <span class="nv">underflow</span> <span class="p">:</span> <span class="kt">Underflow</span>
</code></pre>

<p><code>occlusionInsets</code> lets callers reserve scroll viewport space for persistent overlays,
such as a floating bottom bar. Listable applies these insets to the scroll view content
inset, applies the relevant axis-specific edges to scroll indicators, and combines them
with keyboard avoidance so first-responder scrolling treats the occluded area as
unavailable.</p>
<pre class="highlight swift"><code>
<span class="kd">struct</span> <span class="kt">Underflow</span> <span class="p">:</span> <span class="kt">Equatable</span>
<span class="p">{</span>
Expand All @@ -285,7 +295,7 @@ <h3 id='self-sizing-cells' class='heading'>Self-Sizing Cells</h3>
<p>Another common pain-point for standard <code>UITableViews</code> or <code>UICollectionViews</code> is handling dynamic and self sizing cells. Listable handles this transparently for you, and provides many ways to size content. Each <code>Item</code> has a <code>sizing</code> property, which can be set to any of the following values. <code>.default</code> pulls the default sizing of the item from the <code><a href="Structs/List/Measurement.html">List.Measurement</a></code> mentioned above, where as the <code>thatFits</code> and <code>autolayout</code> values size the item based on <code>sizeThatFits</code> and <code>systemLayoutSizeFitting</code>, respectively.</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">enum</span> <span class="kt">Sizing</span> <span class="p">:</span> <span class="kt">Equatable</span>
<span class="p">{</span>
<span class="k">case</span> <span class="err">`</span><span class="k">default</span><span class="err">`</span>
<span class="k">case</span> <span class="p">`</span><span class="nv">default</span><span class="p">`</span>

<span class="k">case</span> <span class="nf">fixed</span><span class="p">(</span><span class="kt">CGFloat</span><span class="p">)</span>

Expand Down
Binary file modified docs/BlueprintLists/docsets/BlueprintLists.tgz
Binary file not shown.
12 changes: 11 additions & 1 deletion docs/BlueprintLists/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -264,8 +264,18 @@ <h3 id='highly-customizable' class='heading'>Highly Customizable</h3>
<span class="p">{</span>
<span class="kd">public</span> <span class="k">var</span> <span class="nv">keyboardDismissMode</span> <span class="p">:</span> <span class="kt">UIScrollView</span><span class="o">.</span><span class="kt">KeyboardDismissMode</span>

<span class="kd">public</span> <span class="k">var</span> <span class="nv">keyboardAdjustmentMode</span> <span class="p">:</span> <span class="kt">KeyboardAdjustmentMode</span>

<span class="kd">public</span> <span class="k">var</span> <span class="nv">occlusionInsets</span> <span class="p">:</span> <span class="kt">UIEdgeInsets</span>

<span class="kd">public</span> <span class="k">var</span> <span class="nv">underflow</span> <span class="p">:</span> <span class="kt">Underflow</span>
</code></pre>

<p><code>occlusionInsets</code> lets callers reserve scroll viewport space for persistent overlays,
such as a floating bottom bar. Listable applies these insets to the scroll view content
inset, applies the relevant axis-specific edges to scroll indicators, and combines them
with keyboard avoidance so first-responder scrolling treats the occluded area as
unavailable.</p>
<pre class="highlight swift"><code>
<span class="kd">struct</span> <span class="kt">Underflow</span> <span class="p">:</span> <span class="kt">Equatable</span>
<span class="p">{</span>
Expand All @@ -285,7 +295,7 @@ <h3 id='self-sizing-cells' class='heading'>Self-Sizing Cells</h3>
<p>Another common pain-point for standard <code>UITableViews</code> or <code>UICollectionViews</code> is handling dynamic and self sizing cells. Listable handles this transparently for you, and provides many ways to size content. Each <code>Item</code> has a <code>sizing</code> property, which can be set to any of the following values. <code>.default</code> pulls the default sizing of the item from the <code><a href="Structs/List/Measurement.html">List.Measurement</a></code> mentioned above, where as the <code>thatFits</code> and <code>autolayout</code> values size the item based on <code>sizeThatFits</code> and <code>systemLayoutSizeFitting</code>, respectively.</p>
<pre class="highlight swift"><code><span class="kd">public</span> <span class="kd">enum</span> <span class="kt">Sizing</span> <span class="p">:</span> <span class="kt">Equatable</span>
<span class="p">{</span>
<span class="k">case</span> <span class="err">`</span><span class="k">default</span><span class="err">`</span>
<span class="k">case</span> <span class="p">`</span><span class="nv">default</span><span class="p">`</span>

<span class="k">case</span> <span class="nf">fixed</span><span class="p">(</span><span class="kt">CGFloat</span><span class="p">)</span>

Expand Down
Loading
Loading