SwiftUI and Combine – Stories instagram 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 longivity for every story
  • iOS and macOS support
  • Customizable dark and light scheme support for every story

1. Stories

Define enum with your stories conforming to IStory ** There must be defined at least one story**

    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 4
            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 processe
  • stories – stories conforming to IStory

        manager: StoriesManager.self,
        stories: Stories.allCases


  • strategy – default strategy for the item menu width allocation is auto
Size strategy Description
circle Repeat stories
once Show just once
  • current – start story if not defined start with first

  • leeway – delay before start stories

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


View Github