Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
b01092b
Check in shared FlowStackExample scheme
zac Jul 24, 2026
09e53e4
Remove unused CachedAsyncImage dependency from library target
zac Jul 24, 2026
05d701f
Fix FlowElement equality and hashing; harden FlowPath
zac Jul 24, 2026
606fbca
Harden FlowStack internals and remove dead code
zac Jul 24, 2026
dc59dca
Remove public retroactive Hashable conformances on CGRect/CGPoint
zac Jul 24, 2026
7254250
Fix stale closures and scroll-view geometry in gesture handling
zac Jul 24, 2026
85d1cfe
Fix displayCornerRadius caching and unify its fallback
zac Jul 24, 2026
41de4eb
Resync accessibility z-index on programmatic path changes
zac Jul 24, 2026
ac1923d
Expose showsScrim in FlowLink.Configuration; fix scrim spelling and d…
zac Jul 24, 2026
07f7152
Modernize CI workflows; run package tests in CI
zac Jul 24, 2026
e4c7f1d
README: fix install instructions, badges, and typos
zac Jul 24, 2026
4d765a2
Fixed project file issue
zac Jul 24, 2026
2ce87cb
Suppress scroll during edge-swipe interactive dismiss
zac Jul 24, 2026
d6cf8a3
Match per-corner display radii; stop using the display radius for flo…
zac Sep 18, 2026
7a965c1
Add FlowPresentationStyle to control full-screen vs. card presentation
zac Sep 18, 2026
40e34ee
Example: respect the safe area on every edge the detail view touches
zac Sep 18, 2026
24eef6a
Example: use a toolbar close button instead of positioning one by hand
zac Sep 18, 2026
fe7b35c
Example: add a presentation style picker
zac Sep 18, 2026
b1bd3ad
Example: move the presentation style picker into a toolbar menu
zac Sep 18, 2026
cb98a1a
Zoom back to where the link is now, and scroll it into view on dismiss
zac Sep 20, 2026
828f12e
Keep a link hidden until its destination has zoomed all the way back
zac Sep 20, 2026
c99bc00
Scroll a link into existence before dismissing into it
zac Sep 20, 2026
d7020b4
Retake a link's snapshots when its layout changes
zac Sep 20, 2026
569c355
Take a snapshot just before dismissing into a link that has none
zac Sep 20, 2026
98ff6cc
Retake a link's snapshots when it is restyled without being resized
zac Sep 20, 2026
f14fffd
Deprecate FlowPath.updateSnapshots(from:), a workaround that had no e…
zac Sep 20, 2026
0dd078b
Let touches through to the flow stack as soon as a dismissal begins
zac Sep 20, 2026
1be56aa
Make FlowLink's button coordinator an NSObject
zac Sep 20, 2026
245a2ea
End a pull that the system cancels, and drop the coordinator's dead s…
zac Sep 21, 2026
0e88eb9
Clean up dead code and needless work in flow links and the store
zac Sep 21, 2026
e65c03c
README: document returning to a link
zac Sep 21, 2026
6a6c247
Hold a destination's safe area on every edge while it is pulled
zac Sep 21, 2026
c7f1fd0
Example: options to compare a destination with and without a Navigati…
zac Sep 21, 2026
7b4f0e7
Hold a pulled destination's layout until it is back at rest, navigati…
zac Sep 21, 2026
af5fa7c
Tell apart flow links that present the same value
zac Sep 21, 2026
a0bd84f
Hold every edge of a nested navigation stack's content during a pull,…
zac Sep 22, 2026
b2d58a5
Hold a navigation stack's floating items in place during a pull
zac Sep 22, 2026
56cfccd
Place a nested navigation bar again once a spring presentation has se…
zac Sep 22, 2026
cb8bb7b
Example: a focused search prompt over the stack, and a hold that can'…
zac Sep 22, 2026
6769f64
Ignore the keyboard only in destinations that fill the flow stack
zac Sep 28, 2026
7422cb8
Respect disabled dismissal and cancel an active pull safely
zac Sep 29, 2026
b77d0a9
Refresh link registration when its value or identity changes
zac Sep 29, 2026
912c20f
Refresh hosted destination content with its current inputs
zac Sep 29, 2026
ba1e1cb
Reset cancelled pulls after the view update completes
zac Sep 29, 2026
24f72db
Test hosted content, link lifecycles, and interactive dismissal behavior
zac Sep 29, 2026
1dd3628
Fix the documentation warnings, and install from 0.1.0
zac Oct 1, 2026
dee65de
README: replace the demo GIF with a video hosted by GitHub
zac Oct 4, 2026
5452cf6
Keep one view to reveal a flow link from
zac Oct 6, 2026
b4721df
Document the whole public API, and prepare for the Swift Package Index
zac Oct 6, 2026
18e1700
Keep a card from being dismissed by its scrim when dismissal is disabled
zac Oct 7, 2026
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
27 changes: 14 additions & 13 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
name: Build
on:
push:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-example-project:
test-package:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v3.6.0
- name: mxcl/Xcodebuild
uses: mxcl/xcodebuild@v2.0.0
uses: actions/checkout@v7
- name: Test FlowStack
uses: mxcl/xcodebuild@v3
with:
platform: iOS
action: build
workspace: FlowStackExample/FlowStackExample.xcodeproj/project.xcworkspace
scheme: FlowStackExample
build-package:
action: test
scheme: FlowStack
build-example-project:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v3.6.0
- name: mxcl/Xcodebuild
uses: mxcl/xcodebuild@v2.0.0
uses: actions/checkout@v7
- name: Build FlowStackExample
uses: mxcl/xcodebuild@v3
with:
platform: iOS
action: build
action: build
workspace: FlowStackExample/FlowStackExample.xcodeproj/project.xcworkspace
scheme: FlowStackExample
8 changes: 4 additions & 4 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ jobs:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v7
- name: Set up Pages
uses: actions/configure-pages@v3
uses: actions/configure-pages@v6
- name: Generate Docs
run: |
xcodebuild docbuild -scheme FlowStack -destination generic/platform=iOS OTHER_DOCC_FLAGS="--transform-for-static-hosting --hosting-base-path FlowStack --output-path docs"
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
uses: actions/upload-pages-artifact@v5
with:
path: ./docs

Expand All @@ -49,4 +49,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
uses: actions/deploy-pages@v5
6 changes: 6 additions & 0 deletions .spi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 1
builder:
configs:
# FlowStack uses UIKit, so its documentation has to be built for iOS rather than the default, macOS.
- documentation_targets: [FlowStack]
platform: ios
22 changes: 22 additions & 0 deletions FlowStackExample/FlowStackExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
EDA1DD3A2A67693A00D82A9D /* FlowStackExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA1DD372A67693A00D82A9D /* FlowStackExampleApp.swift */; };
EDA1DD3B2A67693A00D82A9D /* Product.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA1DD332A67693A00D82A9D /* Product.swift */; };
EDA1DD3C2A67693A00D82A9D /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA1DD342A67693A00D82A9D /* ContentView.swift */; };
EDCA5E012E3000000000A001 /* CachedAsyncImage in Frameworks */ = {isa = PBXBuildFile; productRef = EDCA5E022E3000000000A002 /* CachedAsyncImage */; };
EDFD07BC2A6F319E00CB0737 /* ProductRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDFD07BB2A6F319E00CB0737 /* ProductRow.swift */; };
/* End PBXBuildFile section */

Expand All @@ -38,6 +39,7 @@
buildActionMask = 2147483647;
files = (
ED8DE1742A6767B900215165 /* FlowStack in Frameworks */,
EDCA5E012E3000000000A001 /* CachedAsyncImage in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -119,6 +121,7 @@
name = FlowStackExample;
packageProductDependencies = (
ED8DE1732A6767B900215165 /* FlowStack */,
EDCA5E022E3000000000A002 /* CachedAsyncImage */,
);
productName = FlowStackExample;
productReference = ED8DE15D2A6765F500215165 /* FlowStackExample.app */;
Expand Down Expand Up @@ -148,6 +151,9 @@
Base,
);
mainGroup = ED8DE1542A6765F500215165;
packageReferences = (
EDCA5E032E3000000000A003 /* XCRemoteSwiftPackageReference "swiftui-cached-async-image" */,
);
productRefGroup = ED8DE15E2A6765F500215165 /* Products */;
projectDirPath = "";
projectRoot = "";
Expand Down Expand Up @@ -389,11 +395,27 @@
};
/* End XCConfigurationList section */

/* Begin XCRemoteSwiftPackageReference section */
EDCA5E032E3000000000A003 /* XCRemoteSwiftPackageReference "swiftui-cached-async-image" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/lorenzofiamingo/swiftui-cached-async-image.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 2.1.0;
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
ED8DE1732A6767B900215165 /* FlowStack */ = {
isa = XCSwiftPackageProductDependency;
productName = FlowStack;
};
EDCA5E022E3000000000A002 /* CachedAsyncImage */ = {
isa = XCSwiftPackageProductDependency;
package = EDCA5E032E3000000000A003 /* XCRemoteSwiftPackageReference "swiftui-cached-async-image" */;
productName = CachedAsyncImage;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = ED8DE1552A6765F500215165 /* Project object */;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1500"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "ED8DE15C2A6765F500215165"
BuildableName = "FlowStackExample.app"
BlueprintName = "FlowStackExample"
ReferencedContainer = "container:FlowStackExample.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "ED8DE15C2A6765F500215165"
BuildableName = "FlowStackExample.app"
BlueprintName = "FlowStackExample"
ReferencedContainer = "container:FlowStackExample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "ED8DE15C2A6765F500215165"
BuildableName = "FlowStackExample.app"
BlueprintName = "FlowStackExample"
ReferencedContainer = "container:FlowStackExample.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Loading
Loading