{"id":15055343,"url":"https://github.com/danielsaidi/tagkit","last_synced_at":"2025-04-10T03:36:43.214Z","repository":{"id":58770591,"uuid":"526082841","full_name":"danielsaidi/TagKit","owner":"danielsaidi","description":"TagKit is a Swift SDK that makes it easy to work with tags and slugification in Swift \u0026 SwiftUI.","archived":false,"fork":false,"pushed_at":"2024-03-14T22:04:59.000Z","size":12983,"stargazers_count":63,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-01T18:07:52.967Z","etag":null,"topics":["ios","macos","slugify","swift","swiftui","tag","tags","tvos","visionos","watchos"],"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/danielsaidi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["danielsaidi"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-08-18T06:22:00.000Z","updated_at":"2024-06-07T09:54:51.979Z","dependencies_parsed_at":"2024-06-07T10:10:34.749Z","dependency_job_id":null,"html_url":"https://github.com/danielsaidi/TagKit","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"1835e4723775054b7d904484d95f4c0aba74b684"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielsaidi%2FTagKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielsaidi%2FTagKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielsaidi%2FTagKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielsaidi%2FTagKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielsaidi","download_url":"https://codeload.github.com/danielsaidi/TagKit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248153577,"owners_count":21056460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","macos","slugify","swift","swiftui","tag","tags","tvos","visionos","watchos"],"created_at":"2024-09-24T21:41:03.720Z","updated_at":"2025-04-10T03:36:43.205Z","avatar_url":"https://github.com/danielsaidi.png","language":"Swift","funding_links":["https://github.com/sponsors/danielsaidi"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"Resources/Icon.png\" alt=\"Project Icon\" width=\"250\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/danielsaidi/TagKit?color=%2300550\u0026sort=semver\" alt=\"Version\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Swift-5.9-orange.svg\" alt=\"Swift 5.9\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/platform-SwiftUI-blue.svg\" alt=\"Swift UI\" title=\"Swift UI\" /\u003e\n    \u003ca href=\"https://danielsaidi.github.io/TagKit\"\u003e\u003cimg src=\"https://img.shields.io/badge/documentation-web-blue.svg\" alt=\"Documentation\" /\u003e\u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/danielsaidi/TagKit\" alt=\"MIT License\" /\u003e\n\u003c/p\u003e\n\n\n\n# TagKit\n\nTagKit is a Swift SDK that makes it easy to work with tags and slugify strings in `Swift` and `SwiftUI`.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"Resources/Demo-v2.gif\" width=450 /\u003e\n\u003c/p\u003e\n\nYou can slug and tag any type, customize the slug format, and use the built-in views to list and edit tags with ease.\n\n\n\n\n## Installation\n\nTagKit can be installed with the Swift Package Manager:\n\n```\nhttps://github.com/danielsaidi/TagKit.git\n```\n\n\n\n## Getting started\n\nTagKit lets you slugify strings and manage tags for any taggable type.\n\n\n### Slugs\n\nSlugifying a string means to remove unwanted characters and replacing whitespaces with a separator. This is often used in urls, where a page slug creates a unique, valid url that also describes the content.\n\nTagKit has a ``Swift/String/slugified(with:)`` string extension that lets you slugify strings with a standard or custom ``SlugConfiguration``:\n\n```\nlet custom = SlugConfiguration(\n    separator: \"+\",\n    allowedCharacters: .init(charactersIn: \"hewo\")\n)\n\n\"Hello, world!\".slugified()             // \"hello-world\" \n\"Hello, world!\".slugified(with: custom) // \"he+wo\"\n```\n\nSlugified strings are automatically lowercased, since a slug should be case-insensitively unique.\n\n\n### Tags\n\nTagging is the process of adding tags to an item, with the intent to categorize, group, filter and search among tags.\n\nTagKit has a ``Taggable`` protocol that can be implemented by any type that has mutable ``Taggable/tags``:\n\n```swift\npublic protocol Taggable {\n\n    var tags: [String] { get set }\n}\n```\n\nOnce a type implements ``Taggable``, it can make use of a lot of automatically implemented functionality that the protocol provides, like ``Taggable/hasTags``, ``Taggable/slugifiedTags``, ``Taggable/addTag(_:)``, ``Taggable/removeTag(_:)``, ``Taggable/toggleTag(_:)``. All ``Taggable`` collections are extended as well.\n\n\n### Views\n\nTagKit has a couple of tag related views, like ``TagList``, ``TagEditList`` and ``TagTextField``.\n\n\n\n## Documentation\n\nThe online [documentation][Documentation] has more information, articles, code examples, etc.\n\n\n\n## Support this library\n\nYou can [sponsor me][Sponsors] on GitHub Sponsors or [reach out][Email] for paid support, to help support my [open-source projects][OpenSource].\n\nYour support makes it possible for me to put more work into these projects and make them the best they can be.\n\n\n\n## Contact\n\nFeel free to reach out if you have questions or if you want to contribute in any way:\n\n* Website: [danielsaidi.com][Website]\n* E-mail: [daniel.saidi@gmail.com][Email]\n* Bluesky: [@danielsaidi@bsky.social][Bluesky]\n* Mastodon: [@danielsaidi@mastodon.social][Mastodon]\n\n\n\n## License\n\nTagKit is available under the MIT license. See the [LICENSE][License] file for more info.\n\n\n\n[Email]: mailto:daniel.saidi@gmail.com\n[Website]: https://danielsaidi.com\n[GitHub]: https://github.com/danielsaidi\n[OpenSource]: https://danielsaidi.com/opensource\n[Sponsors]: https://github.com/sponsors/danielsaidi\n\n[Bluesky]: https://bsky.app/profile/danielsaidi.bsky.social\n[Mastodon]: https://mastodon.social/@danielsaidi\n[Twitter]: https://twitter.com/danielsaidi\n\n[Documentation]: https://danielsaidi.github.io/TagKit\n[License]: https://github.com/danielsaidi/TagKit/blob/master/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielsaidi%2Ftagkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielsaidi%2Ftagkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielsaidi%2Ftagkit/lists"}