From 388b29d51a4dc9dad0d90eff5ebdbb24e4f8181b Mon Sep 17 00:00:00 2001
From: Sergey Kudashev <kudashevs@gmail.com>
Date: Sat, 7 Dec 2024 13:29:27 +0300
Subject: [PATCH] Add ShareProviders add Bluesky share provider

---
 README.md                             | 4 +++-
 config/share-buttons.php              | 5 +++++
 src/Facades/ShareButtonsFacade.php    | 1 +
 src/ShareButtons.php                  | 1 +
 tests/Acceptance/ShareButtonsTest.php | 6 ++++++
 5 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index adb1d197..c28e3924 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,7 @@ a flexible and convenient way within seconds. The package was originated from th
 
 * Facebook
 * X (formerly Twitter)
+* Bluesky
 * LinkedIn
 * Telegram
 * WhatsApp
@@ -127,7 +128,8 @@ Each method accepts an array of options (more information about these options in
 [//]: # (@todo don't forget to update these methods)
 ```
 facebook($options)      # Generates a Facebook share button
-twitter($options)       # Generates a Twitter share button
+twitter($options)       # Generates an X (former Twitter) share button
+bluesky($options)       # Generates a Bluesky share button
 linkedin($options)      # Generates a LinkedIn share button
 telegram($options)      # Generates a Telegram share button
 whatsapp($options)      # Generates a WhatsApp share button
diff --git a/config/share-buttons.php b/config/share-buttons.php
index 103296f3..2dcf11ce 100644
--- a/config/share-buttons.php
+++ b/config/share-buttons.php
@@ -37,6 +37,10 @@
     */
 
     'buttons' => [
+        'bluesky' => [
+            'url' => 'https://bsky.app/intent/compose?text=:url%20:text',
+            'text' => 'Default share text',
+        ],
         'copylink' => [
             'url' => ':url',
             'extra' => [
@@ -115,6 +119,7 @@
     */
 
     'templates' => [
+        'bluesky' => '<a href=":url" class="social-button:class":id:title:rel><span class="fab fa-square-bluesky"></span></a>',
         'copylink' => '<a href=":url" class="social-button:class" id="clip":title:rel><span class="fas fa-share"></span></a>',
         'evernote' => '<a href=":url" class="social-button:class":id:title:rel><span class="fab fa-evernote"></span></a>',
         'facebook' => '<a href=":url" class="social-button:class":id:title:rel><span class="fab fa-facebook-square"></span></a>',
diff --git a/src/Facades/ShareButtonsFacade.php b/src/Facades/ShareButtonsFacade.php
index 0b71e3e3..d975d440 100644
--- a/src/Facades/ShareButtonsFacade.php
+++ b/src/Facades/ShareButtonsFacade.php
@@ -10,6 +10,7 @@
  *
  * @method ShareButtons page($url, string $title = '', array $options = [])
  * @method ShareButtons currentPage($url, string $title = '', array $options = [])
+ * @method ShareButtons bluesky(array $options = [])
  * @method ShareButtons copylink(array $options = [])
  * @method ShareButtons evernote(array $options = [])
  * @method ShareButtons facebook(array $options = [])
diff --git a/src/ShareButtons.php b/src/ShareButtons.php
index 71d00bc6..cfd16ce0 100644
--- a/src/ShareButtons.php
+++ b/src/ShareButtons.php
@@ -13,6 +13,7 @@
 /**
  * @todo don't forget to update these method signatures
  *
+ * @method ShareButtons bluesky(array $options = [])
  * @method ShareButtons copylink(array $options = [])
  * @method ShareButtons evernote(array $options = [])
  * @method ShareButtons facebook(array $options = [])
diff --git a/tests/Acceptance/ShareButtonsTest.php b/tests/Acceptance/ShareButtonsTest.php
index 168d6bae..6400d5ac 100644
--- a/tests/Acceptance/ShareButtonsTest.php
+++ b/tests/Acceptance/ShareButtonsTest.php
@@ -103,6 +103,12 @@ public function it_can_generate_an_expected_share_button(
     public static function provideDifferentShareButtonsValues(): array
     {
         return [
+            'bluesky' => [
+                'bluesky',
+                'https://mysite.com',
+                'My bluesky title',
+                'https://bsky.app/intent/compose?text=https%3A%2F%2Fmysite.com%20My+bluesky+title',
+            ],
             'copylink' => [
                 'copylink',
                 'https://mysite.com',