{"id":48844296,"url":"https://github.com/swiftly-developed/swiftlyui","last_synced_at":"2026-04-15T04:02:53.926Z","repository":{"id":322628615,"uuid":"1090248924","full_name":"Swiftly-Developed/SwiftlyUI","owner":"Swiftly-Developed","description":"A collection of production-ready SwiftUI components: multi-pickers, token fields, timelines, and layouts. Cross-platform, accessible, and fully customizable.","archived":false,"fork":false,"pushed_at":"2025-12-03T17:16:38.000Z","size":217,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T08:42:48.016Z","etag":null,"topics":["ios","ipados","macos","swift","swiftui","swiftui-components"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Swiftly-Developed.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-05T12:17:59.000Z","updated_at":"2025-12-03T17:15:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Swiftly-Developed/SwiftlyUI","commit_stats":null,"previous_names":["swiftlyworkspace/swiftlyui","swiftly-developed/swiftlyui"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/Swiftly-Developed/SwiftlyUI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Swiftly-Developed","download_url":"https://codeload.github.com/Swiftly-Developed/SwiftlyUI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swiftly-Developed%2FSwiftlyUI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31825514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","ipados","macos","swift","swiftui","swiftui-components"],"created_at":"2026-04-15T04:02:39.110Z","updated_at":"2026-04-15T04:02:53.910Z","avatar_url":"https://github.com/Swiftly-Developed.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SwiftlyUI\n\nA collection of reusable SwiftUI components designed for modern iOS, macOS, tvOS, and watchOS applications.\n\n[![Swift](https://img.shields.io/badge/Swift-5.7+-orange.svg)](https://swift.org)\n[![Platform](https://img.shields.io/badge/Platform-iOS%2016%2B%20%7C%20macOS%2013%2B%20%7C%20tvOS%2016%2B%20%7C%20watchOS%209%2B-lightgrey.svg)](https://developer.apple.com)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n## ✨ Features\n\nSwiftlyUI provides a comprehensive set of customizable components that integrate seamlessly with your SwiftUI applications:\n\n- **🎯 Multi-Selection Pickers** - Flexible pickers with search, sections, and multiple presentation styles\n- **🏷️ Token \u0026 Tag Fields** - Powerful tag input with auto-completion and user selection with avatars\n- **📐 Layout Components** - Adaptive flow layouts and token displays with overflow handling\n- **📱 Cross-Platform** - Works on iOS, macOS, tvOS, and watchOS\n- **🎨 Customizable** - Extensive styling and theming options\n- **♿ Accessible** - Built with accessibility in mind\n- **🧪 Well-Tested** - Comprehensive unit tests and documentation\n\n## 🚀 Quick Start\n\n### Swift Package Manager\n\nAdd SwiftlyUI to your project using Xcode:\n\n1. File → Add Package Dependencies\n2. Enter the repository URL: `https://github.com/SwiftlyWorkspace/SwiftlyUI.git`\n3. Click Add Package\n\nOr add it to your `Package.swift`:\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/SwiftlyWorkspace/SwiftlyUI.git\", from: \"1.0.0\")\n]\n```\n\n### Basic Usage\n\n```swift\nimport SwiftUI\nimport SwiftlyUI\n\nstruct ContentView: View {\n    @State private var selection: Set\u003cString\u003e = []\n\n    var body: some View {\n        Form {\n            MultiPicker(\"Choose Options\", selection: $selection) {\n                Text(\"Option 1\").multiPickerTag(\"opt1\")\n                Text(\"Option 2\").multiPickerTag(\"opt2\")\n                Text(\"Option 3\").multiPickerTag(\"opt3\")\n            }\n            .multiPickerStyle(.menu)\n        }\n    }\n}\n```\n\n## 🧩 Components\n\n### Multi-Selection Pickers\n\nComprehensive multi-selection system with three specialized variants:\n\n| Component | Best For | Documentation |\n|-----------|----------|---------------|\n| **MultiPicker** | General multi-selection with optional sections | [📖 Docs](docs/MultiPicker.md) |\n| **SearchableMultiPicker** | Large lists requiring search/filter | [📖 Docs](docs/SearchableMultiPicker.md) |\n| **GroupedMultiPicker** | Advanced sectioning with collapsible groups | [📖 Docs](docs/GroupedMultiPicker.md) |\n\n**Quick Example:**\n```swift\n@State private var selection: Set\u003cString\u003e = []\n\nMultiPicker(\"Select Items\", selection: $selection) {\n    ForEach(items, id: \\.self) { item in\n        Text(item).multiPickerTag(item)\n    }\n}\n.multiPickerStyle(.sheet)\n```\n\n**Features:**\n- 🎨 Multiple styles: inline, navigation, sheet, menu\n- 🔍 Built-in search and filtering\n- 📁 Section support with headers\n- ⚖️ Selection limits (min/max)\n- ⚡ Bulk actions (Select All, Clear All)\n- 🎯 Type-safe with any Hashable type\n- 🪙 Token display with overflow indicators\n\n### Token \u0026 Tag Fields\n\nSophisticated input components for tags and user selection:\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **TokenTagField** | Advanced tag input with auto-completion and inline editing | [📖 Docs](docs/TokenTagField.md) |\n| **UserTokenField** | User selection with search, avatars, and multi-mode support | [📖 Docs](docs/UserTokenField.md) |\n\n**Quick Example:**\n```swift\n@State private var tags: [Tag] = []\n@State private var inputText = \"\"\n\nTokenTagField(\n    tags: $tags,\n    inputText: $inputText,\n    suggestedTags: suggestions,\n    onAdd: { tags.append($0) },\n    onRemove: { tags.removeAll { $0.id == $1.id } },\n    onUpdate: { tag in\n        if let index = tags.firstIndex(where: { $0.id == tag.id }) {\n            tags[index] = tag\n        }\n    }\n)\n```\n\n**Features:**\n- ✅ Tag creation and management\n- ✏️ Inline editing (double-tap)\n- 🎨 Color customization\n- 💡 Smart auto-completion\n- ⌨️ Full keyboard support\n- 👤 Avatar support (Image, URL, initials)\n\n### Layout Components\n\nFlexible layout utilities for responsive UIs:\n\n| Component | Description | Documentation |\n|-----------|-------------|---------------|\n| **FlowLayout** | Wraps content into rows like CSS flexbox | [📖 Docs](docs/Layout.md#flowlayout) |\n| **AdaptiveTokenLayout** | Displays tokens with \"+X\" overflow indicator | [📖 Docs](docs/Layout.md#adaptivetokenlayout) |\n\n**Quick Example:**\n```swift\nFlowLayout(spacing: 8) {\n    ForEach(items) { item in\n        ChipView(text: item)\n    }\n}\n```\n\n## 📖 Documentation\n\n### Component Documentation\n\n- **[MultiPicker](docs/MultiPicker.md)** - General multi-selection picker with ViewBuilder API\n- **[SearchableMultiPicker](docs/SearchableMultiPicker.md)** - Multi-picker with built-in search\n- **[GroupedMultiPicker](docs/GroupedMultiPicker.md)** - Advanced sectioning with collapsible groups\n- **[TokenTagField](docs/TokenTagField.md)** - Tag input with auto-completion\n- **[UserTokenField](docs/UserTokenField.md)** - User selection with avatars\n- **[Layout Components](docs/Layout.md)** - FlowLayout and AdaptiveTokenLayout\n\n### Additional Resources\n\n- **[API Documentation](https://yourusername.github.io/SwiftlyUI/documentation/swiftlyui/)**\n- **[Migration Guide](docs/migration.md)**\n- **[Contributing Guide](CONTRIBUTING.md)**\n\n## 🎨 Styling\n\nAll components support customization through standard SwiftUI modifiers and environment values:\n\n```swift\nMultiPicker(\"Options\", selection: $selection) {\n    ForEach(items, id: \\.self) { item in\n        Text(item).multiPickerTag(item)\n    }\n}\n.multiPickerStyle(.navigationLink)  // Choose presentation style\n.font(.body)                         // Customize typography\n.tint(.blue)                         // Accent color\n```\n\n### Available Picker Styles\n\n- `.inline` - Items displayed directly in the view\n- `.navigationLink` - Navigate to a new screen (ideal for iOS)\n- `.sheet` - Present in a modal sheet\n- `.menu` - Dropdown/popover menu (default on macOS)\n\n## 📱 Demo App\n\nCheck out the included demo app to see all components in action:\n\n```bash\ngit clone https://github.com/SwiftlyWorkspace/SwiftlyUI-DemoApp.git\ncd SwiftlyUI-DemoApp\nopen SwiftlyUI-DemoApp.xcodeproj\n```\n\nThe demo app showcases:\n- Multiple usage examples for each component\n- Different styling and configuration options\n- Interactive examples you can test\n- Best practices and integration patterns\n\n## 🛠️ Requirements\n\n- **iOS 16.0+** / **macOS 13.0+** / **tvOS 16.0+** / **watchOS 9.0+**\n- **Swift 5.7+**\n- **Xcode 14.0+**\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n1. Clone the repository\n2. Open in Xcode or your preferred Swift development environment\n3. Run tests: `swift test`\n4. Build the demo app: `cd SwiftlyUI-DemoApp \u0026\u0026 open SwiftlyUI-DemoApp.xcodeproj`\n\n## 📄 License\n\nSwiftlyUI is available under the MIT license. See the [LICENSE](LICENSE) file for more info.\n\n## 👤 Author\n\n**Ben Van Aken**\n- GitHub: [@benvanaken](https://github.com/benvanaken)\n\n## 🙏 Acknowledgments\n\n- Inspired by modern design systems and component libraries\n- Built with love for the SwiftUI community\n- Thanks to all contributors and beta testers\n\n---\n\n**⭐ If you found SwiftlyUI helpful, please give it a star on GitHub! ⭐**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftly-developed%2Fswiftlyui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswiftly-developed%2Fswiftlyui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswiftly-developed%2Fswiftlyui/lists"}