Swiftpack.co - The-Igor/d3-stories-instagram as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by The-Igor.
The-Igor/d3-stories-instagram v.1.2.2
Swift UI component - Stories instagram, slideshow, crypto wallet intro
⭐️ 1
πŸ•“ 5 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/The-Igor/d3-stories-instagram.git", from: "v.1.2.2")

SwiftUI and Combine - Stories intro multi-platform widget


  • β˜‘ Long tap - pause stories showcase
  • β˜‘ Tap - next story
  • β˜‘ Leeway - pause before start stories
  • β˜‘ Customize component with you own stories and every story with it's own view
  • β˜‘ Customize time longevity for every story
  • β˜‘ iOS and macOS support
  • β˜‘ Customizable dark and light scheme support for every story
  • β˜‘ Control stories run as by external sources that are not inside StoriesWidget so via Gesture
  • β˜‘ Observing stories life circle for reacting on state change
  • β˜‘ Internal and custom external errors handling
  • β˜‘ Localization (En, Es) All errors and system messages are localized

1. Stories

Define enum with your stories conforming to IStory

    public enum Stories: IStory {
        case first
        case second
        case third

        public func builder(progress : Binding<CGFloat>) -> some View {
            switch(self) {
                case .first:  StoryTpl(self, .green,  "1", progress)
                case .second: StoryTpl(self, .brown,  "2", progress)
                case .third:  StoryTpl(self, .purple, "3", progress)
        public var duration: TimeInterval {
            switch self{
                case .first, .third : return 5
                default : return 3

        public var colorScheme: ColorScheme? {
            switch(self) {
                case .first: return .light
                default: return .dark


2. Create stories widget

  • manager - package standard manager StoriesManager.self for managing stories life circle.
    Define your own manager conforming to IStoriesManager if you need some specific managing process
  • stories - stories conforming to IStory
        manager: StoriesManager.self,
        stories: Stories.allCases


  • strategy - default strategy is circle
Strategy Description
circle Repeat stories
once Show just once
  • current - start story if not defined start with first

  • leeway - delay before start stories, default .seconds(0)

  • pause - shared var to control stories run by external sources that are not inside StoriesWidget, default .constant(false). For example if you launched modal view and need to pause running stories while modal view is existed you can do it via shared variable passing as a binding in StoriesWidget.

  • validator - Custom validator to check validity of stories data set before start

  • onStoriesStateChanged - Closure to react on stories state change

Stories life circle

You can observe events of the stories life circle and react on it's change. Pass closure to config of StoriesWidget.

  • onStoriesStateChanged(StoriesState) - Closure to react on stories state change
        manager: StoriesManager.self,
        stories: Stories.allCases                    
    ){ state in
        print("Do something on stories \(state) change")
State Description
ready Waiting to start If there's leeway this is the state during this delay before the big start
start Big start
begin Begin of a story
end End of a story
suspend At the moment of pause and then is kept until is resumed. Informs that currently demonstration is paused
resume At the moment of resume and then is kept until the next pause or end of a story
finish Big finish. At the end of the strategy .once

Stories life circle

Stories error handling

There's internal check of stories data

  • There are no stories
  • Duration must be a positive number greater than zero

Custom stories error handling

if you need custom check for stories data, just implement validator conforming to IStoriesValidater and pass it as a parameter to StoriesWidget

        manager: StoriesManager.self,
        stories: Stories.allCases,
        validator: CustomStoriesValidater.self

There's an example of custom validator. Take a look on CustomStoriesValidater implementation. Stories won't be started if there's an error then instead of stories there'll be the error view with description of errors.

Custom error handling for stories

Localization (En, Es)

All the internal errors and system messages that might occur are localized. Localization for stories is up to you as it's external source for the component.

Se localizan todos los errores internos y mensajes del sistema que puedan producirse. La localizaciΓ³n de las historias depende de usted, ya que es la fuente externa del componente.

Custom stories error handling

SwiftUI example of using package


click to watch expected UI behavior for the example

click to watch expected UI behavior for the example

click to watch expected UI behavior for the example


  • You need to have Xcode 13 installed in order to have access to Documentation Compiler (DocC)
  • Go to Product > Build Documentation or βŒƒβ‡§βŒ˜ D


Stars: 1
Last commit: 2 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

Stories instagram widget
5 weeks ago
  • Localization (En, Es) All errors and system messages are localized

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics