Skip to content

Commit fd014a9

Browse files
Bumping versions to 17.2.0. (#622)
## Release notes ### 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. ## Notes - Regenerated Listable and BlueprintUILists docs. - Local Ruby 3.2.2 failed to compile on this macOS runtime, so docs were generated with Jazzy 0.15.3 under Ruby 3.3.9 using the same commands as `Scripts/generate_docs.sh`.
1 parent e477525 commit fd014a9

85 files changed

Lines changed: 241 additions & 123 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,26 @@
44

55
### Added
66

7-
- Added `Behavior.occlusionInsets` to account for persistent overlay UI that visually covers the list viewport.
8-
97
### Removed
108

119
### Changed
1210

1311
### Misc
1412

15-
- Added a development demo for validating keyboard avoidance with a floating bottom overlay and text fields.
16-
1713
### Internal
1814

1915
# Past Releases
2016

17+
# 17.2.0 - 2026-06-01
18+
19+
### Added
20+
21+
- Added `Behavior.occlusionInsets` to account for persistent overlay UI that visually covers the list viewport.
22+
23+
### Misc
24+
25+
- Added a development demo for validating keyboard avoidance with a floating bottom overlay and text fields.
26+
2127
# 17.1.0 - 2026-05-29
2228

2329
### Added

docs/BlueprintLists/Functions.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ <h4>Declaration</h4>
291291
<h4>Declaration</h4>
292292
<div class="language">
293293
<p class="aside-title">Swift</p>
294-
<pre class="highlight swift"><code><span class="kd">@inline(__always)</span>
294+
<pre class="highlight swift"><code><span class="kd">@inline</span><span class="p">(</span><span class="n">__always</span><span class="p">)</span>
295295
<span class="kd">public</span> <span class="kd">func</span> <span class="nf">preconditionFailure</span><span class="p">(</span>
296296
<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>
297297
<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>
@@ -329,7 +329,7 @@ <h3 id='note' class='heading'>Note</h3>
329329
<p>If your item is to be used in more than one place, it is recommended that you
330330
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
331331
<h3 id='example' class='heading'>Example</h3>
332-
<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>
332+
<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>
333333
<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>
334334
<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>
335335
<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>
@@ -392,7 +392,7 @@ <h3 id='note' class='heading'>Note</h3>
392392
<p>If your item is to be used in more than one place, it is recommended that you
393393
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
394394
<h3 id='example' class='heading'>Example</h3>
395-
<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>
395+
<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>
396396
<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>
397397
<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>
398398
<span class="kt">Box</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>

docs/BlueprintLists/Structs/ElementHeaderFooterContent.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ <h4>Declaration</h4>
206206
<h4>Declaration</h4>
207207
<div class="language">
208208
<p class="aside-title">Swift</p>
209-
<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>
209+
<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>
210210

211211
</div>
212212
</div>

docs/BlueprintLists/Structs/ElementItemContent.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ <h4>Declaration</h4>
232232
<h4>Declaration</h4>
233233
<div class="language">
234234
<p class="aside-title">Swift</p>
235-
<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>
235+
<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>
236236

237237
</div>
238238
</div>

docs/BlueprintLists/docsets/BlueprintLists.docset/Contents/Resources/Documents/Functions.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ <h4>Declaration</h4>
291291
<h4>Declaration</h4>
292292
<div class="language">
293293
<p class="aside-title">Swift</p>
294-
<pre class="highlight swift"><code><span class="kd">@inline(__always)</span>
294+
<pre class="highlight swift"><code><span class="kd">@inline</span><span class="p">(</span><span class="n">__always</span><span class="p">)</span>
295295
<span class="kd">public</span> <span class="kd">func</span> <span class="nf">preconditionFailure</span><span class="p">(</span>
296296
<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>
297297
<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>
@@ -329,7 +329,7 @@ <h3 id='note' class='heading'>Note</h3>
329329
<p>If your item is to be used in more than one place, it is recommended that you
330330
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
331331
<h3 id='example' class='heading'>Example</h3>
332-
<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>
332+
<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>
333333
<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>
334334
<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>
335335
<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>
@@ -392,7 +392,7 @@ <h3 id='note' class='heading'>Note</h3>
392392
<p>If your item is to be used in more than one place, it is recommended that you
393393
create a <code><a href="Protocols/BlueprintItemContent.html">BlueprintItemContent</a></code> struct to share logic to avoid duplicate code.</p>
394394
<h3 id='example' class='heading'>Example</h3>
395-
<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>
395+
<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>
396396
<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>
397397
<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>
398398
<span class="kt">Box</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>

docs/BlueprintLists/docsets/BlueprintLists.docset/Contents/Resources/Documents/Structs/ElementHeaderFooterContent.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ <h4>Declaration</h4>
206206
<h4>Declaration</h4>
207207
<div class="language">
208208
<p class="aside-title">Swift</p>
209-
<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>
209+
<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>
210210

211211
</div>
212212
</div>

docs/BlueprintLists/docsets/BlueprintLists.docset/Contents/Resources/Documents/Structs/ElementItemContent.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ <h4>Declaration</h4>
232232
<h4>Declaration</h4>
233233
<div class="language">
234234
<p class="aside-title">Swift</p>
235-
<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>
235+
<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>
236236

237237
</div>
238238
</div>

docs/BlueprintLists/docsets/BlueprintLists.docset/Contents/Resources/Documents/index.html

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,18 @@ <h3 id='highly-customizable' class='heading'>Highly Customizable</h3>
264264
<span class="p">{</span>
265265
<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>
266266

267+
<span class="kd">public</span> <span class="k">var</span> <span class="nv">keyboardAdjustmentMode</span> <span class="p">:</span> <span class="kt">KeyboardAdjustmentMode</span>
268+
269+
<span class="kd">public</span> <span class="k">var</span> <span class="nv">occlusionInsets</span> <span class="p">:</span> <span class="kt">UIEdgeInsets</span>
270+
267271
<span class="kd">public</span> <span class="k">var</span> <span class="nv">underflow</span> <span class="p">:</span> <span class="kt">Underflow</span>
268272
</code></pre>
273+
274+
<p><code>occlusionInsets</code> lets callers reserve scroll viewport space for persistent overlays,
275+
such as a floating bottom bar. Listable applies these insets to the scroll view content
276+
inset, applies the relevant axis-specific edges to scroll indicators, and combines them
277+
with keyboard avoidance so first-responder scrolling treats the occluded area as
278+
unavailable.</p>
269279
<pre class="highlight swift"><code>
270280
<span class="kd">struct</span> <span class="kt">Underflow</span> <span class="p">:</span> <span class="kt">Equatable</span>
271281
<span class="p">{</span>
@@ -285,7 +295,7 @@ <h3 id='self-sizing-cells' class='heading'>Self-Sizing Cells</h3>
285295
<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>
286296
<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>
287297
<span class="p">{</span>
288-
<span class="k">case</span> <span class="err">`</span><span class="k">default</span><span class="err">`</span>
298+
<span class="k">case</span> <span class="p">`</span><span class="nv">default</span><span class="p">`</span>
289299

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

175 Bytes
Binary file not shown.

docs/BlueprintLists/index.html

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,18 @@ <h3 id='highly-customizable' class='heading'>Highly Customizable</h3>
264264
<span class="p">{</span>
265265
<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>
266266

267+
<span class="kd">public</span> <span class="k">var</span> <span class="nv">keyboardAdjustmentMode</span> <span class="p">:</span> <span class="kt">KeyboardAdjustmentMode</span>
268+
269+
<span class="kd">public</span> <span class="k">var</span> <span class="nv">occlusionInsets</span> <span class="p">:</span> <span class="kt">UIEdgeInsets</span>
270+
267271
<span class="kd">public</span> <span class="k">var</span> <span class="nv">underflow</span> <span class="p">:</span> <span class="kt">Underflow</span>
268272
</code></pre>
273+
274+
<p><code>occlusionInsets</code> lets callers reserve scroll viewport space for persistent overlays,
275+
such as a floating bottom bar. Listable applies these insets to the scroll view content
276+
inset, applies the relevant axis-specific edges to scroll indicators, and combines them
277+
with keyboard avoidance so first-responder scrolling treats the occluded area as
278+
unavailable.</p>
269279
<pre class="highlight swift"><code>
270280
<span class="kd">struct</span> <span class="kt">Underflow</span> <span class="p">:</span> <span class="kt">Equatable</span>
271281
<span class="p">{</span>
@@ -285,7 +295,7 @@ <h3 id='self-sizing-cells' class='heading'>Self-Sizing Cells</h3>
285295
<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>
286296
<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>
287297
<span class="p">{</span>
288-
<span class="k">case</span> <span class="err">`</span><span class="k">default</span><span class="err">`</span>
298+
<span class="k">case</span> <span class="p">`</span><span class="nv">default</span><span class="p">`</span>
289299

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

0 commit comments

Comments
 (0)