diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results
index 3fcc6e63..c475100d 100644
--- a/.phpunit.cache/test-results
+++ b/.phpunit.cache/test-results
@@ -1 +1 @@
-{"version":1,"defects":{"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testCreate":5,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testIndex":5,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testDestroy":5,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testFileUpload":8,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testCreateSubsciption":1,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testUpdatePaymentMethod":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingSubscribe":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingGetDetails":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingPaymentMethod":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingCoupon":1,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testTwoFactorEmail":7,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testGoogleTwoFactor":5,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testGetTwoFactorPage":5,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testVerifyTwoFactorEmail":7,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testCreate":7,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testIndex":5,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testDestroy":5,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testAuthenticatorTwoFactor":7,"Tests\\Feature\\Controllers\\Auth\\RegistrationControllerTest::testPostRegistration":7,"Tests\\Feature\\Controllers\\Auth\\RecoveryControllerTest::testVerifyRecovery":7,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testImageUpload":7,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testLeaveTeam":5,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testRemoveTeamMember":5,"Tests\\Feature\\Controllers\\TeamsControllerTest::testDelete":5,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testAccept":7},"times":{"Tests\\Unit\\ActivityServiceTest::testLog":0.007,"Tests\\Unit\\InviteServiceTest::testCreate":0.014,"Tests\\Unit\\InviteServiceTest::testValidateInvitation":0.003,"Tests\\Unit\\TeamServiceTest::testCreate":0.001,"Tests\\Unit\\TeamServiceTest::testUpdate":0.002,"Tests\\Unit\\TeamServiceTest::testInvite":0.004,"Tests\\Unit\\TeamServiceTest::testLeaveTeam":0.005,"Tests\\Unit\\TeamServiceTest::testRemoveMember":0.005,"Tests\\Unit\\TeamServiceTest::testDeleteTeam":0.006,"Tests\\Feature\\Controllers\\Admin\\DashboardControllerTest::testIndex":0.094,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testIndex":0.038,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testCreate":0.037,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testStore":0.013,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testEdit":0.037,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testUpdate":0.006,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testDelete":0.006,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testIndex":0.038,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testSearch":0.038,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testGetInvite":0.033,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testPostInvite":0.101,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testEdit":0.04,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testUpdate":0.007,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testLoginAsUser":0.009,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testReturnToLoginFromUser":0.011,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testDelete":0.006,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testCreate":0.008,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testIndex":0.001,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testDestroy":0.001,"Tests\\Feature\\Controllers\\Ajax\\CookiePolicyControllerTest::testAccept":0.006,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testFileUpload":0.025,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testCreateSubsciption":0.003,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testUpdatePaymentMethod":0.001,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testMe":0.033,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testMeWithBearerToken":0.011,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testUpdate":0.008,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testDestroy":0.005,"Tests\\Feature\\Controllers\\Auth\\ConfirmsPasswordControllerTest::testGetConfirmPasswordPage":0.029,"Tests\\Feature\\Controllers\\Auth\\ForgotPasswordControllerTest::testGetForgotPassword":0.019,"Tests\\Feature\\Controllers\\Auth\\LoginControllerTest::testGetLoginPage":0.022,"Tests\\Feature\\Controllers\\Auth\\RegistrationControllerTest::testGetRegistration":0.02,"Tests\\Feature\\Controllers\\Auth\\ResetPasswordControllerTest::testGetResetPasswordPage":0.016,"Tests\\Feature\\Controllers\\Auth\\VerificationControllerTest::testGetVerificationPage":0.005,"Tests\\Feature\\Controllers\\DashboardControllerTest::testDashboard":0.042,"Tests\\Feature\\Controllers\\InvitesControllerTest::testResend":0.007,"Tests\\Feature\\Controllers\\InvitesControllerTest::testRevoke":0.006,"Tests\\Feature\\Controllers\\PagesControllerTest::testHome":0.02,"Tests\\Feature\\Controllers\\PagesControllerTest::testSupport":0.029,"Tests\\Feature\\Controllers\\PagesControllerTest::testPrivacyPolicy":0.026,"Tests\\Feature\\Controllers\\PagesControllerTest::testTermsOfService":0.026,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testShow":0.047,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testEditMember":0.043,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testUpdateMember":0.012,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testInviteMember":0.009,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testLeaveTeam":0.008,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testRemoveTeamMember":0.009,"Tests\\Feature\\Controllers\\TeamsControllerTest::testIndex":0.032,"Tests\\Feature\\Controllers\\TeamsControllerTest::testIndexWithSubcription":0.032,"Tests\\Feature\\Controllers\\TeamsControllerTest::testCreate":0.034,"Tests\\Feature\\Controllers\\TeamsControllerTest::testStore":0.009,"Tests\\Feature\\Controllers\\TeamsControllerTest::testEdit":0.039,"Tests\\Feature\\Controllers\\TeamsControllerTest::testUpdate":0.01,"Tests\\Feature\\Controllers\\TeamsControllerTest::testDelete":0.011,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingSubscribe":0.001,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingGetDetails":0.001,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingPaymentMethod":0.001,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingCoupon":0.001,"Tests\\Feature\\Controllers\\User\\ChangePasswordControllerTest::testSecurity":0.033,"Tests\\Feature\\Controllers\\User\\ChangePasswordControllerTest::testUpdatePassword":1.297,"Tests\\Feature\\Controllers\\User\\DestroyControllerTest::testDestroy":0.043,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testIndex":0.031,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testAccept":0.009,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testReject":0.045,"Tests\\Feature\\Controllers\\User\\LogoutSessionsControllerTest::testSessionLogout":0.009,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testIndex":0.031,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testMarkAsRead":0.009,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testDelete":0.007,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testDeleteAll":0.008,"Tests\\Feature\\Controllers\\User\\SettingsControllerTest::testSettings":0.042,"Tests\\Feature\\Controllers\\User\\SettingsControllerTest::testUpdateSettings":0.009,"Tests\\Feature\\Controllers\\User\\SettingsControllerTest::testUpdateUserAvatar":0.01,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testTwoFactorEmail":0.009,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testGoogleTwoFactor":0,"Tests\\Feature\\Helpers\\ActivityHelperTest::testActivityLog":0.002,"Tests\\Feature\\Helpers\\NotificationHelperTest::testAppNotify":0,"Tests\\Feature\\Helpers\\NotificationHelperTest::testEmailNotifyDisabled":0.001,"Tests\\Feature\\Helpers\\NotificationHelperTest::testPusherGeneral":0.002,"Tests\\Feature\\Helpers\\NotificationHelperTest::testPusherUser":0.001,"Tests\\Feature\\Resources\\UserResourceTest::testUserResource":0,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testGetTwoFactorPage":0.021,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testVerifyTwoFactorEmail":0.008,"Tests\\Feature\\Controllers\\Auth\\RecoveryControllerTest::testGetRecoveryPage":0.019,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testCreate":0.008,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testIndex":0.048,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testDestroy":0.013,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testAuthenticatorTwoFactor":0.013,"Tests\\Feature\\Controllers\\Auth\\RegistrationControllerTest::testPostRegistration":0.012,"Tests\\Feature\\Controllers\\Auth\\RecoveryControllerTest::testVerifyRecovery":0.014,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testImageUpload":0.006}}
\ No newline at end of file
+{"version":1,"defects":{"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testCreate":5,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testIndex":5,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testDestroy":5,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testFileUpload":8,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testCreateSubsciption":1,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testUpdatePaymentMethod":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingSubscribe":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingGetDetails":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingPaymentMethod":1,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingCoupon":1,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testTwoFactorEmail":7,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testGoogleTwoFactor":5,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testGetTwoFactorPage":5,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testVerifyTwoFactorEmail":7,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testCreate":7,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testIndex":5,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testDestroy":5,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testAuthenticatorTwoFactor":7,"Tests\\Feature\\Controllers\\Auth\\RegistrationControllerTest::testPostRegistration":7,"Tests\\Feature\\Controllers\\Auth\\RecoveryControllerTest::testVerifyRecovery":7,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testImageUpload":7,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testLeaveTeam":5,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testRemoveTeamMember":5,"Tests\\Feature\\Controllers\\TeamsControllerTest::testDelete":5,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testAccept":7},"times":{"Tests\\Unit\\ActivityServiceTest::testLog":0.005,"Tests\\Unit\\InviteServiceTest::testCreate":0.012,"Tests\\Unit\\InviteServiceTest::testValidateInvitation":0.003,"Tests\\Unit\\TeamServiceTest::testCreate":0.001,"Tests\\Unit\\TeamServiceTest::testUpdate":0.002,"Tests\\Unit\\TeamServiceTest::testInvite":0.003,"Tests\\Unit\\TeamServiceTest::testLeaveTeam":0.004,"Tests\\Unit\\TeamServiceTest::testRemoveMember":0.004,"Tests\\Unit\\TeamServiceTest::testDeleteTeam":0.004,"Tests\\Feature\\Controllers\\Admin\\DashboardControllerTest::testIndex":0.081,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testIndex":0.035,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testCreate":0.033,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testStore":0.012,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testEdit":0.036,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testUpdate":0.007,"Tests\\Feature\\Controllers\\Admin\\RoleControllerTest::testDelete":0.006,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testIndex":0.037,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testSearch":0.047,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testGetInvite":0.033,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testPostInvite":0.098,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testEdit":0.037,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testUpdate":0.007,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testLoginAsUser":0.007,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testReturnToLoginFromUser":0.011,"Tests\\Feature\\Controllers\\Admin\\UserControllerTest::testDelete":0.006,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testCreate":0.008,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testIndex":0.001,"Tests\\Feature\\Controllers\\Ajax\\ApiTokenControllerTest::testDestroy":0.001,"Tests\\Feature\\Controllers\\Ajax\\CookiePolicyControllerTest::testAccept":0.005,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testFileUpload":0.017,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testCreateSubsciption":0.003,"Tests\\Feature\\Controllers\\Ajax\\SubscriptionControllerTest::testUpdatePaymentMethod":0.001,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testMe":0.031,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testMeWithBearerToken":0.011,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testUpdate":0.008,"Tests\\Feature\\Controllers\\Api\\UsersControllerTest::testDestroy":0.004,"Tests\\Feature\\Controllers\\Auth\\ConfirmsPasswordControllerTest::testGetConfirmPasswordPage":0.027,"Tests\\Feature\\Controllers\\Auth\\ForgotPasswordControllerTest::testGetForgotPassword":0.016,"Tests\\Feature\\Controllers\\Auth\\LoginControllerTest::testGetLoginPage":0.019,"Tests\\Feature\\Controllers\\Auth\\RegistrationControllerTest::testGetRegistration":0.018,"Tests\\Feature\\Controllers\\Auth\\ResetPasswordControllerTest::testGetResetPasswordPage":0.015,"Tests\\Feature\\Controllers\\Auth\\VerificationControllerTest::testGetVerificationPage":0.005,"Tests\\Feature\\Controllers\\DashboardControllerTest::testDashboard":0.036,"Tests\\Feature\\Controllers\\InvitesControllerTest::testResend":0.006,"Tests\\Feature\\Controllers\\InvitesControllerTest::testRevoke":0.007,"Tests\\Feature\\Controllers\\PagesControllerTest::testHome":0.018,"Tests\\Feature\\Controllers\\PagesControllerTest::testSupport":0.027,"Tests\\Feature\\Controllers\\PagesControllerTest::testPrivacyPolicy":0.025,"Tests\\Feature\\Controllers\\PagesControllerTest::testTermsOfService":0.025,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testShow":0.043,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testEditMember":0.037,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testUpdateMember":0.012,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testInviteMember":0.012,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testLeaveTeam":0.008,"Tests\\Feature\\Controllers\\TeamMembersControllerTest::testRemoveTeamMember":0.008,"Tests\\Feature\\Controllers\\TeamsControllerTest::testIndex":0.03,"Tests\\Feature\\Controllers\\TeamsControllerTest::testIndexWithSubcription":0.03,"Tests\\Feature\\Controllers\\TeamsControllerTest::testCreate":0.03,"Tests\\Feature\\Controllers\\TeamsControllerTest::testStore":0.008,"Tests\\Feature\\Controllers\\TeamsControllerTest::testEdit":0.038,"Tests\\Feature\\Controllers\\TeamsControllerTest::testUpdate":0.01,"Tests\\Feature\\Controllers\\TeamsControllerTest::testDelete":0.011,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingSubscribe":0.002,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingGetDetails":0.001,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingPaymentMethod":0.001,"Tests\\Feature\\Controllers\\User\\BillingControllerTest::testBillingCoupon":0.001,"Tests\\Feature\\Controllers\\User\\ChangePasswordControllerTest::testSecurity":0.03,"Tests\\Feature\\Controllers\\User\\ChangePasswordControllerTest::testUpdatePassword":0.146,"Tests\\Feature\\Controllers\\User\\DestroyControllerTest::testDestroy":0.044,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testIndex":0.029,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testAccept":0.009,"Tests\\Feature\\Controllers\\User\\InvitesControllerTest::testReject":0.047,"Tests\\Feature\\Controllers\\User\\LogoutSessionsControllerTest::testSessionLogout":0.009,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testIndex":0.028,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testMarkAsRead":0.008,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testDelete":0.007,"Tests\\Feature\\Controllers\\User\\NotificationControllerTest::testDeleteAll":0.008,"Tests\\Feature\\Controllers\\User\\SettingsControllerTest::testSettings":0.037,"Tests\\Feature\\Controllers\\User\\SettingsControllerTest::testUpdateSettings":0.009,"Tests\\Feature\\Controllers\\User\\SettingsControllerTest::testUpdateUserAvatar":0.01,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testTwoFactorEmail":0.01,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testGoogleTwoFactor":0,"Tests\\Feature\\Helpers\\ActivityHelperTest::testActivityLog":0.001,"Tests\\Feature\\Helpers\\NotificationHelperTest::testAppNotify":0,"Tests\\Feature\\Helpers\\NotificationHelperTest::testEmailNotifyDisabled":0.001,"Tests\\Feature\\Helpers\\NotificationHelperTest::testPusherGeneral":0.002,"Tests\\Feature\\Helpers\\NotificationHelperTest::testPusherUser":0.001,"Tests\\Feature\\Resources\\UserResourceTest::testUserResource":0,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testGetTwoFactorPage":0.02,"Tests\\Feature\\Controllers\\Auth\\TwoFactorControllerTest::testVerifyTwoFactorEmail":0.008,"Tests\\Feature\\Controllers\\Auth\\RecoveryControllerTest::testGetRecoveryPage":0.019,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testCreate":0.007,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testIndex":0.052,"Tests\\Feature\\Controllers\\User\\ApiTokenControllerTest::testDestroy":0.014,"Tests\\Feature\\Controllers\\User\\UserTwoFactorTest::testAuthenticatorTwoFactor":0.01,"Tests\\Feature\\Controllers\\Auth\\RegistrationControllerTest::testPostRegistration":0.013,"Tests\\Feature\\Controllers\\Auth\\RecoveryControllerTest::testVerifyRecovery":0.013,"Tests\\Feature\\Controllers\\Ajax\\FileUploadControllerTest::testImageUpload":0.005}}
\ No newline at end of file
diff --git a/app/Http/Controllers/Ajax/SubscriptionController.php b/app/Http/Controllers/Ajax/SubscriptionController.php
deleted file mode 100644
index c17eed0c..00000000
--- a/app/Http/Controllers/Ajax/SubscriptionController.php
+++ /dev/null
@@ -1,89 +0,0 @@
-user();
-
- $user->update([
- 'state' => $request->state,
- 'billing_email' => $request->email,
- 'country' => $request->country,
- ]);
-
- $user->newSubscription(config('billing.subscription_name'), $request->plan)
- ->create($request->payment_method);
-
- $plan = config("billing.plans.{$request->plan}.name");
- $notification = new InAppNotification("You're now subscribed on the {$plan} plan.");
- $notification->isImportant();
- $user->notify($notification);
-
- activity("Subscribed to {$plan} plan.");
-
- session()->flash('message', "Subscribed to {$plan} plan.");
-
- Cache::forget($user->cacheIdentifier('subscription'));
-
- return response()->json([
- 'message' => 'You\'re now subscribed!',
- ]);
- } catch (IncompletePayment $exception) {
- $message = 'Subscription requires extra steps.';
- $redirect = route(
- 'cashier.payment',
- [$exception->payment->id, 'redirect' => route(RouteServiceProvider::HOME)]
- );
- } catch (Exception $e) {
- Log::error($e->getMessage());
- }
-
- return response()->json([
- 'message' => $message,
- 'redirect' => $redirect,
- ], 409);
- }
-
- public function updatePaymentMethod(Request $request)
- {
- try {
- $user = $request->user();
-
- $user->updateDefaultPaymentMethod($request->payment_method);
-
- $notification = new InAppNotification("Your payment method has been updated to a card ending in {$user->card_last_four}.");
- $notification->isImportant();
- $user->notify($notification);
-
- activity("Payment method updated to card ending in {$user->card_last_four}.");
-
- session()->flash('message', "Payment method updated to card ending in {$user->card_last_four}.");
-
- return response()->json([
- 'message' => 'Your payment method has been updated!',
- ]);
- } catch (Exception $e) {
- Log::error($e->getMessage());
- }
-
- return response()->json([
- 'message' => 'Card change failed',
- ], 409);
- }
-}
diff --git a/app/Http/Controllers/User/BillingController.php b/app/Http/Controllers/User/BillingController.php
index 26882add..a693190d 100644
--- a/app/Http/Controllers/User/BillingController.php
+++ b/app/Http/Controllers/User/BillingController.php
@@ -2,91 +2,93 @@
namespace App\Http\Controllers\User;
-use App\Http\Controllers\Controller;
-use App\Notifications\InAppNotification;
use Exception;
+use App\View\Forms\SwapForm;
use Illuminate\Http\Request;
+use App\View\Forms\CouponForm;
+use App\View\Forms\BillingForm;
+use App\View\Forms\SubscribeForm;
use Illuminate\Support\Facades\Log;
-use Throwable;
+use App\Http\Controllers\Controller;
class BillingController extends Controller
{
/**
- * Billing settings.
+ * Get subscription details.
*
- * @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse
+ * @return \Illuminate\View\View
*/
- public function subscribe(Request $request)
+ public function index(Request $request)
{
$user = $request->user();
+ $upcomingPayment = null;
- if ($user->hasActiveSubscription()) {
- return redirect()->route('user.billing.details');
- }
+ $user->createOrGetStripeCustomer();
+ $user->updateDefaultPaymentMethodFromStripe();
- try {
- $intent = $user->createSetupIntent();
- } catch (Throwable $th) {
- $intent = null;
+ $form = app(BillingForm::class)->setUser($user)->make();
+ $subscribeForm = app(SubscribeForm::class)->setUser($user)->make();
+ $swapForm = app(SwapForm::class)->setUser($user)->make();
+ $couponForm = app(CouponForm::class)->make();
+
+ if ($user->hasActiveSubscription()) {
+ $upcomingPayment = $user->upcomingInvoice();
}
- return view('user.billing.subscribe')->with(compact('user', 'intent'));
+ return view('user.billing')->with([
+ 'user' => $user,
+ 'form' => $form,
+ 'subscribeForm' => $subscribeForm,
+ 'swapForm' => $swapForm,
+ 'couponForm' => $couponForm,
+ 'upcomingPayment' => $upcomingPayment,
+ ]);
}
- /**
- * Billing renew.
- *
- * @return \Illuminate\View\View
- */
- public function renewSubscription(Request $request)
+ public function update(Request $request)
{
$user = $request->user();
- try {
- $intent = $user->createSetupIntent();
- } catch (Throwable $th) {
- $intent = null;
- }
+ $user->update([
+ 'billing_email' => $request->billing_email,
+ 'state' => $request->state,
+ 'country' => $request->country,
+ ]);
+
+ activity("Updated billing information.");
- return view('user.billing.renew')->with(compact('user', 'intent'));
+ $user->updateStripeCustomer([
+ 'email' => $request->billing_email,
+ 'address' => [
+ 'state' => $request->state,
+ 'country' => $request->country,
+ ],
+ ]);
+
+ return redirect()->back()->withMessage('Information updated.');
}
- /**
- * Get subscription details.
- *
- * @return \Illuminate\View\View
- */
- public function getSubscription(Request $request)
+ public function subscribe(Request $request)
{
- $user = $request->user();
-
try {
- $invoice = $user->upcomingInvoice();
- } catch (Throwable $th) {
- $invoice = null;
- }
+ $paymentMethod = $request->user()->defaultPaymentMethod();
+ $plan = $request->plan;
- $subscription = $user->subscription(config('billing.subscription_name'));
+ $request->user()->newSubscription(
+ 'main', $plan
+ )->create($paymentMethod->id);
- return view('user.billing.details')->with(compact('user', 'invoice', 'subscription'));
- }
-
- /**
- * Change the payment method.
- *
- * @return \Illuminate\View\View
- */
- public function paymentMethod(Request $request)
- {
- $user = $request->user();
+ activity("Subscribed to {$request->plan} subscription plan.");
- try {
- $intent = $user->createSetupIntent();
- } catch (Throwable $th) {
- $intent = null;
+ return redirect()
+ ->route('user.billing')
+ ->withMessage('You\'re subscribed!');
+ } catch (Exception $e) {
+ Log::error($e->getMessage());
}
- return view('user.billing.payment-method')->with(compact('user', 'intent'));
+ return redirect()->back()
+ ->withErrors(['Could not set your subscription, please try again.']);
}
/**
@@ -106,31 +108,23 @@ public function getChangePlan(Request $request)
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function swapPlan(Request $request)
+ public function swap(Request $request)
{
try {
- $request->user()->subscription(config('billing.subscription_name'))->swap($request->plan);
+ $request->user()
+ ->subscription(config('billing.subscription_name'))
+ ->swap($request->plan);
activity("Switched to {$request->plan} subscription plan.");
- return redirect()->route('user.billing.details')->withMessage('Your subscription was swapped!');
+ return redirect()->route('user.billing')
+ ->withMessage('Your subscription was swapped!');
} catch (Exception $e) {
Log::error($e->getMessage());
}
- return redirect()->back()->withErrors(['Could not change your subscription, please try again.']);
- }
-
- /**
- * Add a coupon.
- *
- * @return \Illuminate\View\View
- */
- public function getCoupon(Request $request)
- {
- $user = $request->user();
-
- return view('user.billing.coupon')->with(compact('user'));
+ return redirect()->back()
+ ->withErrors(['Could not change your subscription, please try again.']);
}
/**
@@ -138,92 +132,22 @@ public function getCoupon(Request $request)
*
* @return \Illuminate\Http\RedirectResponse
*/
- public function applyCoupon(Request $request)
+ public function coupon(Request $request)
{
try {
- $request->user()->applyCoupon($request->coupon);
+ $coupon = $request->user()->findPromotionCode($request->coupon)->coupon();
+
+ $request->user()
+ ->applyCoupon($coupon->id);
activity("Used coupon: {$request->coupon}.");
- return redirect()->route('user.billing.details')->withMessage('Your coupon was used!');
+ return redirect()->route('user.billing')
+ ->withMessage('Your coupon was used!');
} catch (Exception $e) {
Log::error($e->getMessage());
}
return redirect()->back()->withErrors(['Could not process your coupon, please try again.']);
}
-
- /**
- * Get invoices.
- *
- * @return \Illuminate\View\View
- */
- public function getInvoices(Request $request)
- {
- $user = $request->user();
-
- try {
- $invoices = $user->invoices(config('billing.subscription_name'));
- } catch (Throwable $th) {
- $invoices = null;
- }
-
- return view('user.billing.invoices')->with(compact('user', 'invoices'));
- }
-
- /**
- * Get one invoice.
- *
- * @return \Illuminate\Http\Response
- */
- public function getInvoiceById($id, Request $request)
- {
- try {
- $user = $request->user();
-
- $response = $user->downloadInvoice($id, [
- 'vendor' => config('billing.invoice.company'),
- 'street' => config('billing.invoice.street'),
- 'location' => config('billing.invoice.location'),
- 'phone' => config('billing.invoice.phone'),
- 'url' => config('billing.invoice.url'),
- 'product' => config('billing.invoice.product'),
- 'description' => 'Subscription',
- ]);
- } catch (Exception $e) {
- $response = back()->withErrors(['Could not find this invoice, please try again.']);
- }
-
- return $response;
- }
-
- /**
- * Cancel Subscription.
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function cancelSubscription(Request $request)
- {
- try {
- $user = $request->user();
- $invoice = $user->upcomingInvoice();
-
- $user->subscription(config('billing.subscription_name'))->cancel();
-
- $date = $invoice->date()->format('Y-m-d');
- $message = 'Your subscription has been cancelled! It will be availale until '.$date;
-
- activity($message);
-
- $notification = new InAppNotification($message);
- $notification->isImportant();
- $user->notify($notification);
-
- return redirect()->route('user.billing.details')->withMessage($message);
- } catch (Exception $e) {
- Log::error($e->getMessage());
- }
-
- return redirect()->back()->withErrors(['Could not cancel billing, please try again.']);
- }
}
diff --git a/app/Http/Controllers/WebhookController.php b/app/Http/Controllers/WebhookController.php
deleted file mode 100644
index 4f5eba25..00000000
--- a/app/Http/Controllers/WebhookController.php
+++ /dev/null
@@ -1,19 +0,0 @@
-route('user.billing.details');
- }
-}
diff --git a/app/Models/Concerns/HasSubscription.php b/app/Models/Concerns/HasSubscription.php
index 9bab5718..a7a5f416 100644
--- a/app/Models/Concerns/HasSubscription.php
+++ b/app/Models/Concerns/HasSubscription.php
@@ -14,14 +14,14 @@ trait HasSubscription
*/
public function hasActiveSubscription()
{
- return Cache::remember($this->cacheIdentifier('subscription'), 86400, function () {
- if ($this->subscription(config('billing.subscription_name')) && ! $this->subscription(config('billing.subscription_name'))->cancelled()) {
+ return Cache::remember($this->cacheIdentifier('subscription'), 300, function () {
+ if ($this->subscription(config('billing.subscription_name')) && ! $this->subscription(config('billing.subscription_name'))->canceled()) {
return true;
}
if (
$this->subscription(config('billing.subscription_name')) &&
- $this->subscription(config('billing.subscription_name'))->cancelled() &&
+ $this->subscription(config('billing.subscription_name'))->canceled() &&
$this->subscription(config('billing.subscription_name'))->onGracePeriod()
) {
return true;
@@ -36,10 +36,10 @@ public function hasActiveSubscription()
*
* @return bool
*/
- public function hasCancelledSubscription()
+ public function hasCanceledSubscription()
{
if ($this->subscription(config('billing.subscription_name'))) {
- return $this->subscription(config('billing.subscription_name'))->cancelled();
+ return $this->subscription(config('billing.subscription_name'))->canceled();
}
return false;
@@ -64,4 +64,13 @@ public function subscriptionPlan($key)
return null;
}
+
+ public function hasBillingInformation()
+ {
+ return (
+ ! is_null($this->billing_email)
+ && ! is_null($this->state)
+ && ! is_null($this->country)
+ );
+ }
}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index f08448fc..27286cca 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -19,6 +19,7 @@ class AppServiceProvider extends ServiceProvider
*/
public function register()
{
+ Cashier::calculateTaxes();
Cashier::keepPastDueSubscriptionsActive();
Cashier::useCustomerModel(User::class);
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index f4b4aec0..d6ce2916 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -81,13 +81,13 @@ public function boot()
});
// Gateway for determining not cancelled subscribers
- Gate::define('subscription-not-cancelled', function ($user) {
- return ! $user->hasCancelledSubscription();
+ Gate::define('subscription-not-canceled', function ($user) {
+ return ! $user->hasCanceledSubscription();
});
// Gateway for determining not cancelled subscribers
- Gate::define('subscription-cancelled', function ($user) {
- return $user->hasCancelledSubscription();
+ Gate::define('subscription-canceled', function ($user) {
+ return $user->hasCanceledSubscription();
});
}
}
diff --git a/app/View/Forms/BillingForm.php b/app/View/Forms/BillingForm.php
new file mode 100644
index 00000000..b621c39a
--- /dev/null
+++ b/app/View/Forms/BillingForm.php
@@ -0,0 +1,57 @@
+ 'Save',
+ ];
+
+ public $user;
+
+ public $orientation = 'horizontal';
+
+ public $disableOnSubmit = true;
+
+ public function setUser($user)
+ {
+ $this->user = $user;
+
+ return $this;
+ }
+
+ public function fields()
+ {
+ $user = $this->user;
+
+ return [
+ Email::make('billing_email', [
+ 'label' => 'Email',
+ 'required' => $user->hasActiveSubscription(),
+ 'value' => $user->billing_email,
+ ]),
+ Text::make('state', [
+ 'label' => 'State',
+ 'required' => $user->hasActiveSubscription(),
+ 'value' => $user->state,
+ ]),
+ Country::make('country', [
+ 'label' => 'Country',
+ 'required' => $user->hasActiveSubscription(),
+ 'data-size' => 5,
+ 'value' => $user->country,
+ ]),
+ ];
+ }
+}
diff --git a/app/View/Forms/CouponForm.php b/app/View/Forms/CouponForm.php
new file mode 100644
index 00000000..d18a7d92
--- /dev/null
+++ b/app/View/Forms/CouponForm.php
@@ -0,0 +1,32 @@
+ 'Apply Coupon',
+ ];
+
+ public $buttonClasses = [
+ 'submit' => 'btn btn-outline-primary',
+ ];
+
+ public $disableOnSubmit = true;
+
+ public function fields()
+ {
+ return [
+ Text::make('coupon')
+ ->required()
+ ->placeholder('Coupon Code'),
+ ];
+ }
+}
diff --git a/app/View/Forms/SubscribeForm.php b/app/View/Forms/SubscribeForm.php
new file mode 100644
index 00000000..93c98bb6
--- /dev/null
+++ b/app/View/Forms/SubscribeForm.php
@@ -0,0 +1,43 @@
+ 'Subscribe',
+ ];
+
+ public $user;
+
+ public $disableOnSubmit = true;
+
+ public function setUser($user)
+ {
+ $this->user = $user;
+
+ return $this;
+ }
+
+ public function fields()
+ {
+ $user = $this->user;
+
+ return [
+ Select::make('plan')
+ ->id('card-holder-plan')
+ ->label('Plan')
+ ->required()
+ ->singular()
+ ->options(collect(config('billing.plans'))->pluck('key', 'label')->toArray())
+ ->value(optional($user->subscription(config('billing.subscription_name')))->stripe_price),
+ ];
+ }
+}
diff --git a/app/View/Forms/SwapForm.php b/app/View/Forms/SwapForm.php
new file mode 100644
index 00000000..6c13c0bb
--- /dev/null
+++ b/app/View/Forms/SwapForm.php
@@ -0,0 +1,47 @@
+ 'Switch Plans',
+ ];
+
+ public $buttonClasses = [
+ 'submit' => 'btn btn-outline-primary',
+ ];
+
+ public $user;
+
+ public $disableOnSubmit = true;
+
+ public function setUser($user)
+ {
+ $this->user = $user;
+
+ return $this;
+ }
+
+ public function fields()
+ {
+ $user = $this->user;
+
+ return [
+ Select::make('plan')
+ ->id('card-holder-plan')
+ ->label('Change Plan to')
+ ->required()
+ ->singular()
+ ->options(collect(config('billing.plans'))->pluck('key', 'label')->toArray())
+ ->value(optional($user->subscription(config('billing.subscription_name')))->stripe_price),
+ ];
+ }
+}
diff --git a/app/View/Forms/UserForm.php b/app/View/Forms/UserForm.php
index b978ca7d..7f62cf9a 100644
--- a/app/View/Forms/UserForm.php
+++ b/app/View/Forms/UserForm.php
@@ -63,7 +63,7 @@ public function fields()
],
'value' => auth()->user()->two_factor_platform,
]),
- ], $this->billingColumns());
+ ]);
}
public function billingColumns()
diff --git a/composer.json b/composer.json
index c937e1c4..50e68646 100644
--- a/composer.json
+++ b/composer.json
@@ -24,7 +24,7 @@
"guzzlehttp/guzzle": "^7.2",
"hisorange/browser-detect": "^4.5",
"intervention/image": "^2.5",
- "laravel/cashier": "^13.0",
+ "laravel/cashier": "^14.0",
"laravel/framework": "^10.0",
"laravel/helpers": "^1.1",
"laravel/sanctum": "^3.0",
diff --git a/composer.lock b/composer.lock
index 4e672d0f..c1a6cf77 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "56e40c00894bc9ac81ec02a80de107a9",
+ "content-hash": "23a907807a0e3cecaae5575fab696af4",
"packages": [
{
"name": "aws/aws-crt-php",
@@ -62,16 +62,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.277.5",
+ "version": "3.277.9",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "69539f82d8690be86f686ea5be1e572b44efcd8b"
+ "reference": "f2437a755b70756425bf8f1bd588a7c583891900"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/69539f82d8690be86f686ea5be1e572b44efcd8b",
- "reference": "69539f82d8690be86f686ea5be1e572b44efcd8b",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/f2437a755b70756425bf8f1bd588a7c583891900",
+ "reference": "f2437a755b70756425bf8f1bd588a7c583891900",
"shasum": ""
},
"require": {
@@ -151,9 +151,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.277.5"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.277.9"
},
- "time": "2023-07-31T18:10:09+00:00"
+ "time": "2023-08-04T18:16:19+00:00"
},
{
"name": "bacon/bacon-qr-code",
@@ -211,16 +211,16 @@
},
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.8.1",
+ "version": "v3.8.2",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "aff3235fecb4104203b1e62c32239c56530eee32"
+ "reference": "56a2dc1da9d3219164074713983eef68996386cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/aff3235fecb4104203b1e62c32239c56530eee32",
- "reference": "aff3235fecb4104203b1e62c32239c56530eee32",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56a2dc1da9d3219164074713983eef68996386cf",
+ "reference": "56a2dc1da9d3219164074713983eef68996386cf",
"shasum": ""
},
"require": {
@@ -279,7 +279,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
- "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.8.1"
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.8.2"
},
"funding": [
{
@@ -291,7 +291,7 @@
"type": "github"
}
],
- "time": "2023-02-21T14:21:02+00:00"
+ "time": "2023-07-26T04:57:49+00:00"
},
{
"name": "bepsvpt/secure-headers",
@@ -1138,68 +1138,6 @@
],
"time": "2022-12-15T16:57:16+00:00"
},
- {
- "name": "dompdf/dompdf",
- "version": "v2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/dompdf/dompdf.git",
- "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85",
- "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-mbstring": "*",
- "masterminds/html5": "^2.0",
- "phenx/php-font-lib": ">=0.5.4 <1.0.0",
- "phenx/php-svg-lib": ">=0.3.3 <1.0.0",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "ext-json": "*",
- "ext-zip": "*",
- "mockery/mockery": "^1.3",
- "phpunit/phpunit": "^7.5 || ^8 || ^9",
- "squizlabs/php_codesniffer": "^3.5"
- },
- "suggest": {
- "ext-gd": "Needed to process images",
- "ext-gmagick": "Improves image processing performance",
- "ext-imagick": "Improves image processing performance",
- "ext-zlib": "Needed for pdf stream compression"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Dompdf\\": "src/"
- },
- "classmap": [
- "lib/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1"
- ],
- "authors": [
- {
- "name": "The Dompdf Community",
- "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
- }
- ],
- "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
- "homepage": "https://github.com/dompdf/dompdf",
- "support": {
- "issues": "https://github.com/dompdf/dompdf/issues",
- "source": "https://github.com/dompdf/dompdf/tree/v2.0.3"
- },
- "time": "2023-02-07T12:51:48+00:00"
- },
{
"name": "dragonmantank/cron-expression",
"version": "v3.3.2",
@@ -1401,16 +1339,16 @@
},
{
"name": "grafite/auth",
- "version": "v1.0.2",
+ "version": "v1.0.3",
"source": {
"type": "git",
"url": "https://github.com/GrafiteInc/Auth.git",
- "reference": "8568007945b7fcb2281489de978267310a404cac"
+ "reference": "6aa3a1becfbc68dc99653c2c01f9a7d7c91cd814"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrafiteInc/Auth/zipball/8568007945b7fcb2281489de978267310a404cac",
- "reference": "8568007945b7fcb2281489de978267310a404cac",
+ "url": "https://api.github.com/repos/GrafiteInc/Auth/zipball/6aa3a1becfbc68dc99653c2c01f9a7d7c91cd814",
+ "reference": "6aa3a1becfbc68dc99653c2c01f9a7d7c91cd814",
"shasum": ""
},
"require": {
@@ -1452,9 +1390,9 @@
"description": "Auth backend and Controller stubs for the Laravel Framework from Laravel UI",
"support": {
"issues": "https://github.com/GrafiteInc/Auth/issues",
- "source": "https://github.com/GrafiteInc/Auth/tree/v1.0.2"
+ "source": "https://github.com/GrafiteInc/Auth/tree/v1.0.3"
},
- "time": "2023-06-09T16:19:42+00:00"
+ "time": "2023-08-03T20:13:08+00:00"
},
{
"name": "grafite/charts",
@@ -1567,16 +1505,16 @@
},
{
"name": "grafite/forms",
- "version": "v6.19.6",
+ "version": "v6.19.7",
"source": {
"type": "git",
"url": "https://github.com/GrafiteInc/Forms.git",
- "reference": "59c23816dd9fabcab7da14ab89ab396fe8211b61"
+ "reference": "ed8d9786a0fd2dfc6e1b43432839e2f5fb7a189f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrafiteInc/Forms/zipball/59c23816dd9fabcab7da14ab89ab396fe8211b61",
- "reference": "59c23816dd9fabcab7da14ab89ab396fe8211b61",
+ "url": "https://api.github.com/repos/GrafiteInc/Forms/zipball/ed8d9786a0fd2dfc6e1b43432839e2f5fb7a189f",
+ "reference": "ed8d9786a0fd2dfc6e1b43432839e2f5fb7a189f",
"shasum": ""
},
"require": {
@@ -1633,9 +1571,9 @@
],
"support": {
"issues": "https://github.com/GrafiteInc/Forms/issues",
- "source": "https://github.com/GrafiteInc/Forms/tree/v6.19.6"
+ "source": "https://github.com/GrafiteInc/Forms/tree/v6.19.7"
},
- "time": "2023-07-27T03:07:36+00:00"
+ "time": "2023-08-04T20:54:40+00:00"
},
{
"name": "grafite/html",
@@ -2142,16 +2080,16 @@
},
{
"name": "guzzlehttp/psr7",
- "version": "2.5.0",
+ "version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "b635f279edd83fc275f822a1188157ffea568ff6"
+ "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
- "reference": "b635f279edd83fc275f822a1188157ffea568ff6",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
+ "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
"shasum": ""
},
"require": {
@@ -2238,7 +2176,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.5.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.6.0"
},
"funding": [
{
@@ -2254,7 +2192,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-17T16:11:26+00:00"
+ "time": "2023-08-03T15:06:02+00:00"
},
{
"name": "guzzlehttp/uri-template",
@@ -2610,49 +2548,52 @@
},
{
"name": "laravel/cashier",
- "version": "v13.17.0",
+ "version": "14.12.4",
"source": {
"type": "git",
"url": "https://github.com/laravel/cashier-stripe.git",
- "reference": "cae3a62e1819a0429ead6567ee26c049bf0c2677"
+ "reference": "a9ea267c686897981865f355d9fcbd8a99048488"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/cashier-stripe/zipball/cae3a62e1819a0429ead6567ee26c049bf0c2677",
- "reference": "cae3a62e1819a0429ead6567ee26c049bf0c2677",
+ "url": "https://api.github.com/repos/laravel/cashier-stripe/zipball/a9ea267c686897981865f355d9fcbd8a99048488",
+ "reference": "a9ea267c686897981865f355d9fcbd8a99048488",
"shasum": ""
},
"require": {
- "dompdf/dompdf": "^1.2.1|^2.0",
"ext-json": "*",
- "illuminate/console": "^8.37|^9.0|^10.0",
- "illuminate/contracts": "^8.37|^9.0|^10.0",
- "illuminate/database": "^8.37|^9.0|^10.0",
- "illuminate/http": "^8.37|^9.0|^10.0",
- "illuminate/log": "^8.37|^9.0|^10.0",
- "illuminate/notifications": "^8.37|^9.0|^10.0",
- "illuminate/routing": "^8.37|^9.0|^10.0",
- "illuminate/support": "^8.37|^9.0|^10.0",
- "illuminate/view": "^8.37|^9.0|^10.0",
- "moneyphp/money": "^3.2|^4.0",
+ "illuminate/console": "^9.21|^10.0",
+ "illuminate/contracts": "^9.21|^10.0",
+ "illuminate/database": "^9.21|^10.0",
+ "illuminate/http": "^9.21|^10.0",
+ "illuminate/log": "^9.21|^10.0",
+ "illuminate/notifications": "^9.21|^10.0",
+ "illuminate/pagination": "^9.21|^10.0",
+ "illuminate/routing": "^9.21|^10.0",
+ "illuminate/support": "^9.21|^10.0",
+ "illuminate/view": "^9.21|^10.0",
+ "moneyphp/money": "^4.0",
"nesbot/carbon": "^2.0",
- "php": "^7.3|^8.0",
- "stripe/stripe-php": "^7.39|^8.0|^9.0",
- "symfony/http-kernel": "^5.0|^6.0",
+ "php": "^8.0",
+ "stripe/stripe-php": "^7.39|^8.0|^9.0|^10.0",
+ "symfony/http-kernel": "^6.0",
"symfony/polyfill-intl-icu": "^1.22.1"
},
"require-dev": {
+ "dompdf/dompdf": "^2.0",
"mockery/mockery": "^1.0",
- "orchestra/testbench": "^6.0|^7.0|^8.0",
+ "orchestra/testbench": "^7.0|^8.0",
+ "phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.0"
},
"suggest": {
+ "dompdf/dompdf": "Required when generating and downloading invoice PDF's using Dompdf (^1.0.1|^2.0).",
"ext-intl": "Allows for more locales besides the default \"en\" when formatting money values."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "13.x-dev"
+ "dev-master": "14.x-dev"
},
"laravel": {
"providers": [
@@ -2690,20 +2631,20 @@
"issues": "https://github.com/laravel/cashier/issues",
"source": "https://github.com/laravel/cashier"
},
- "time": "2023-03-01T09:33:20+00:00"
+ "time": "2023-07-11T14:43:56+00:00"
},
{
"name": "laravel/framework",
- "version": "v10.16.1",
+ "version": "v10.17.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "5c93d2795c393b462481179ce42dedfb30cc19b5"
+ "reference": "a82d96fd94069e346eb8037d178e6ccc4daaf3f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/5c93d2795c393b462481179ce42dedfb30cc19b5",
- "reference": "5c93d2795c393b462481179ce42dedfb30cc19b5",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/a82d96fd94069e346eb8037d178e6ccc4daaf3f9",
+ "reference": "a82d96fd94069e346eb8037d178e6ccc4daaf3f9",
"shasum": ""
},
"require": {
@@ -2721,11 +2662,12 @@
"ext-tokenizer": "*",
"fruitcake/php-cors": "^1.2",
"guzzlehttp/uri-template": "^1.0",
+ "laravel/prompts": "^0.1",
"laravel/serializable-closure": "^1.3",
"league/commonmark": "^2.2.1",
"league/flysystem": "^3.8.0",
"monolog/monolog": "^3.0",
- "nesbot/carbon": "^2.62.1",
+ "nesbot/carbon": "^2.67",
"nunomaduro/termwind": "^1.13",
"php": "^8.1",
"psr/container": "^1.1.1|^2.0.1",
@@ -2804,7 +2746,6 @@
"mockery/mockery": "^1.5.1",
"orchestra/testbench-core": "^8.4",
"pda/pheanstalk": "^4.0",
- "phpstan/phpdoc-parser": "^1.15",
"phpstan/phpstan": "^1.4.7",
"phpunit/phpunit": "^10.0.7",
"predis/predis": "^2.0.2",
@@ -2890,7 +2831,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2023-07-26T03:30:46+00:00"
+ "time": "2023-08-02T14:59:58+00:00"
},
{
"name": "laravel/helpers",
@@ -2948,6 +2889,54 @@
},
"time": "2023-01-09T14:48:11+00:00"
},
+ {
+ "name": "laravel/prompts",
+ "version": "v0.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/prompts.git",
+ "reference": "562c26eb82c85789ef36291112cc27d730d3fed6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/562c26eb82c85789ef36291112cc27d730d3fed6",
+ "reference": "562c26eb82c85789ef36291112cc27d730d3fed6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "illuminate/collections": "^10.0|^11.0",
+ "php": "^8.1",
+ "symfony/console": "^6.2"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.3",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-mockery": "^1.1"
+ },
+ "suggest": {
+ "ext-pcntl": "Required for the spinner to be animated."
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Laravel\\Prompts\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/prompts/issues",
+ "source": "https://github.com/laravel/prompts/tree/v0.1.3"
+ },
+ "time": "2023-08-02T19:57:10+00:00"
+ },
{
"name": "laravel/sanctum",
"version": "v3.2.5",
@@ -3573,16 +3562,16 @@
},
{
"name": "league/mime-type-detection",
- "version": "1.11.0",
+ "version": "1.12.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd"
+ "reference": "c7f2872fb273bf493811473dafc88d60ae829f48"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
- "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/c7f2872fb273bf493811473dafc88d60ae829f48",
+ "reference": "c7f2872fb273bf493811473dafc88d60ae829f48",
"shasum": ""
},
"require": {
@@ -3613,7 +3602,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
- "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0"
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.12.0"
},
"funding": [
{
@@ -3625,7 +3614,7 @@
"type": "tidelift"
}
],
- "time": "2022-04-17T13:12:02+00:00"
+ "time": "2023-08-03T07:14:11+00:00"
},
{
"name": "league/pipeline",
@@ -3686,16 +3675,16 @@
},
{
"name": "livewire/livewire",
- "version": "v2.12.4",
+ "version": "v2.12.5",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
- "reference": "cca62ce8f751279c36404886b74a02e6dd0110f2"
+ "reference": "96a249f5ab51d8377817d802f91d1e440869c1d6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/livewire/zipball/cca62ce8f751279c36404886b74a02e6dd0110f2",
- "reference": "cca62ce8f751279c36404886b74a02e6dd0110f2",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/96a249f5ab51d8377817d802f91d1e440869c1d6",
+ "reference": "96a249f5ab51d8377817d802f91d1e440869c1d6",
"shasum": ""
},
"require": {
@@ -3747,7 +3736,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
- "source": "https://github.com/livewire/livewire/tree/v2.12.4"
+ "source": "https://github.com/livewire/livewire/tree/v2.12.5"
},
"funding": [
{
@@ -3755,87 +3744,20 @@
"type": "github"
}
],
- "time": "2023-07-28T20:46:24+00:00"
- },
- {
- "name": "masterminds/html5",
- "version": "2.8.1",
- "source": {
- "type": "git",
- "url": "https://github.com/Masterminds/html5-php.git",
- "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf",
- "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.7-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Masterminds\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matt Butcher",
- "email": "technosophos@gmail.com"
- },
- {
- "name": "Matt Farina",
- "email": "matt@mattfarina.com"
- },
- {
- "name": "Asmir Mustafic",
- "email": "goetas@gmail.com"
- }
- ],
- "description": "An HTML5 parser and serializer.",
- "homepage": "http://masterminds.github.io/html5-php",
- "keywords": [
- "HTML5",
- "dom",
- "html",
- "parser",
- "querypath",
- "serializer",
- "xml"
- ],
- "support": {
- "issues": "https://github.com/Masterminds/html5-php/issues",
- "source": "https://github.com/Masterminds/html5-php/tree/2.8.1"
- },
- "time": "2023-05-10T11:58:31+00:00"
+ "time": "2023-08-02T06:31:31+00:00"
},
{
"name": "matomo/device-detector",
- "version": "6.1.3",
+ "version": "6.1.4",
"source": {
"type": "git",
"url": "https://github.com/matomo-org/device-detector.git",
- "reference": "3e0fac7e77f3faadc3858fea9f5fa7efeb9cf239"
+ "reference": "74f6c4f6732b3ad6cdf25560746841d522969112"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/3e0fac7e77f3faadc3858fea9f5fa7efeb9cf239",
- "reference": "3e0fac7e77f3faadc3858fea9f5fa7efeb9cf239",
+ "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/74f6c4f6732b3ad6cdf25560746841d522969112",
+ "reference": "74f6c4f6732b3ad6cdf25560746841d522969112",
"shasum": ""
},
"require": {
@@ -3891,7 +3813,7 @@
"source": "https://github.com/matomo-org/matomo",
"wiki": "https://dev.matomo.org/"
},
- "time": "2023-06-06T11:58:07+00:00"
+ "time": "2023-08-02T08:48:53+00:00"
},
{
"name": "matthiasmullie/minify",
@@ -5149,96 +5071,6 @@
},
"time": "2023-04-30T00:54:53+00:00"
},
- {
- "name": "phenx/php-font-lib",
- "version": "0.5.4",
- "source": {
- "type": "git",
- "url": "https://github.com/dompdf/php-font-lib.git",
- "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4",
- "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^3 || ^4 || ^5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "FontLib\\": "src/FontLib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0"
- ],
- "authors": [
- {
- "name": "Fabien Ménager",
- "email": "fabien.menager@gmail.com"
- }
- ],
- "description": "A library to read, parse, export and make subsets of different types of font files.",
- "homepage": "https://github.com/PhenX/php-font-lib",
- "support": {
- "issues": "https://github.com/dompdf/php-font-lib/issues",
- "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4"
- },
- "time": "2021-12-17T19:44:54+00:00"
- },
- {
- "name": "phenx/php-svg-lib",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/dompdf/php-svg-lib.git",
- "reference": "76876c6cf3080bcb6f249d7d59705108166a6685"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685",
- "reference": "76876c6cf3080bcb6f249d7d59705108166a6685",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "php": "^7.1 || ^8.0",
- "sabberworm/php-css-parser": "^8.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Svg\\": "src/Svg"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0"
- ],
- "authors": [
- {
- "name": "Fabien Ménager",
- "email": "fabien.menager@gmail.com"
- }
- ],
- "description": "A library to read, parse and export to PDF SVG files.",
- "homepage": "https://github.com/PhenX/php-svg-lib",
- "support": {
- "issues": "https://github.com/dompdf/php-svg-lib/issues",
- "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.0"
- },
- "time": "2022-09-06T12:16:56+00:00"
- },
{
"name": "phpoption/phpoption",
"version": "1.9.1",
@@ -6343,59 +6175,6 @@
],
"time": "2023-04-15T23:01:58+00:00"
},
- {
- "name": "sabberworm/php-css-parser",
- "version": "8.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
- "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30",
- "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30",
- "shasum": ""
- },
- "require": {
- "ext-iconv": "*",
- "php": ">=5.6.20"
- },
- "require-dev": {
- "codacy/coverage": "^1.4",
- "phpunit/phpunit": "^4.8.36"
- },
- "suggest": {
- "ext-mbstring": "for parsing UTF-8 CSS"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Sabberworm\\CSS\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Raphael Schweikert"
- }
- ],
- "description": "Parser for CSS Files written in PHP",
- "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
- "keywords": [
- "css",
- "parser",
- "stylesheet"
- ],
- "support": {
- "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues",
- "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0"
- },
- "time": "2021-12-11T13:40:54+00:00"
- },
{
"name": "shiftonelabs/laravel-sqs-fifo-queue",
"version": "2.1.0",
@@ -6716,16 +6495,16 @@
},
{
"name": "stripe/stripe-php",
- "version": "v9.9.0",
+ "version": "v10.20.0",
"source": {
"type": "git",
"url": "https://github.com/stripe/stripe-php.git",
- "reference": "479b5c2136fde0debb93d290ceaf20dd161c358f"
+ "reference": "6be8827ee0d6466bf48e2b6997a8feac596405f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/stripe/stripe-php/zipball/479b5c2136fde0debb93d290ceaf20dd161c358f",
- "reference": "479b5c2136fde0debb93d290ceaf20dd161c358f",
+ "url": "https://api.github.com/repos/stripe/stripe-php/zipball/6be8827ee0d6466bf48e2b6997a8feac596405f9",
+ "reference": "6be8827ee0d6466bf48e2b6997a8feac596405f9",
"shasum": ""
},
"require": {
@@ -6771,9 +6550,9 @@
],
"support": {
"issues": "https://github.com/stripe/stripe-php/issues",
- "source": "https://github.com/stripe/stripe-php/tree/v9.9.0"
+ "source": "https://github.com/stripe/stripe-php/tree/v10.20.0"
},
- "time": "2022-11-08T20:25:52+00:00"
+ "time": "2023-08-03T20:01:03+00:00"
},
{
"name": "symfony/console",
@@ -9166,16 +8945,16 @@
},
{
"name": "tightenco/ziggy",
- "version": "v1.6.0",
+ "version": "v1.6.1",
"source": {
"type": "git",
"url": "https://github.com/tighten/ziggy.git",
- "reference": "3beb080be60b1eadad043f3773a160df13fa215f"
+ "reference": "7e34b12d14242d2bebbfc533ef58c7776db173cd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tighten/ziggy/zipball/3beb080be60b1eadad043f3773a160df13fa215f",
- "reference": "3beb080be60b1eadad043f3773a160df13fa215f",
+ "url": "https://api.github.com/repos/tighten/ziggy/zipball/7e34b12d14242d2bebbfc533ef58c7776db173cd",
+ "reference": "7e34b12d14242d2bebbfc533ef58c7776db173cd",
"shasum": ""
},
"require": {
@@ -9227,9 +9006,9 @@
],
"support": {
"issues": "https://github.com/tighten/ziggy/issues",
- "source": "https://github.com/tighten/ziggy/tree/v1.6.0"
+ "source": "https://github.com/tighten/ziggy/tree/v1.6.1"
},
- "time": "2023-05-12T20:08:56+00:00"
+ "time": "2023-08-04T19:01:59+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -9616,16 +9395,16 @@
},
{
"name": "brianium/paratest",
- "version": "v7.2.3",
+ "version": "v7.2.4",
"source": {
"type": "git",
"url": "https://github.com/paratestphp/paratest.git",
- "reference": "ec6713d48856b7e8af64b2f94b084fb861bcc71b"
+ "reference": "a310a310973226f5c25de806987bfc11aa99ab91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paratestphp/paratest/zipball/ec6713d48856b7e8af64b2f94b084fb861bcc71b",
- "reference": "ec6713d48856b7e8af64b2f94b084fb861bcc71b",
+ "url": "https://api.github.com/repos/paratestphp/paratest/zipball/a310a310973226f5c25de806987bfc11aa99ab91",
+ "reference": "a310a310973226f5c25de806987bfc11aa99ab91",
"shasum": ""
},
"require": {
@@ -9636,13 +9415,13 @@
"fidry/cpu-core-counter": "^0.4.1 || ^0.5.1",
"jean85/pretty-package-versions": "^2.0.5",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
- "phpunit/php-code-coverage": "^10.1.2",
+ "phpunit/php-code-coverage": "^10.1.3",
"phpunit/php-file-iterator": "^4.0.2",
"phpunit/php-timer": "^6.0",
- "phpunit/phpunit": "^10.2.6",
+ "phpunit/phpunit": "^10.3.1",
"sebastian/environment": "^6.0.1",
- "symfony/console": "^6.3.0",
- "symfony/process": "^6.3.0"
+ "symfony/console": "^6.3.2",
+ "symfony/process": "^6.3.2"
},
"require-dev": {
"doctrine/coding-standard": "^12.0.0",
@@ -9695,7 +9474,7 @@
],
"support": {
"issues": "https://github.com/paratestphp/paratest/issues",
- "source": "https://github.com/paratestphp/paratest/tree/v7.2.3"
+ "source": "https://github.com/paratestphp/paratest/tree/v7.2.4"
},
"funding": [
{
@@ -9707,7 +9486,7 @@
"type": "paypal"
}
],
- "time": "2023-07-20T10:18:35+00:00"
+ "time": "2023-08-04T09:22:30+00:00"
},
{
"name": "codedungeon/php-cli-colors",
@@ -10116,16 +9895,16 @@
},
{
"name": "laravel/dusk",
- "version": "v7.9.1",
+ "version": "v7.9.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/dusk.git",
- "reference": "c7261854fa3be500c2e331600eb1b265052690be"
+ "reference": "9af939b4f62b9086b7ce38aa1e953034809c5962"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/dusk/zipball/c7261854fa3be500c2e331600eb1b265052690be",
- "reference": "c7261854fa3be500c2e331600eb1b265052690be",
+ "url": "https://api.github.com/repos/laravel/dusk/zipball/9af939b4f62b9086b7ce38aa1e953034809c5962",
+ "reference": "9af939b4f62b9086b7ce38aa1e953034809c5962",
"shasum": ""
},
"require": {
@@ -10186,9 +9965,9 @@
],
"support": {
"issues": "https://github.com/laravel/dusk/issues",
- "source": "https://github.com/laravel/dusk/tree/v7.9.1"
+ "source": "https://github.com/laravel/dusk/tree/v7.9.2"
},
- "time": "2023-07-27T02:09:52+00:00"
+ "time": "2023-07-30T03:20:41+00:00"
},
{
"name": "laravel/pint",
@@ -10955,16 +10734,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.2.6",
+ "version": "10.3.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "1c17815c129f133f3019cc18e8d0c8622e6d9bcd"
+ "reference": "d442ce7c4104d5683c12e67e4dcb5058159e9804"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c17815c129f133f3019cc18e8d0c8622e6d9bcd",
- "reference": "1c17815c129f133f3019cc18e8d0c8622e6d9bcd",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d442ce7c4104d5683c12e67e4dcb5058159e9804",
+ "reference": "d442ce7c4104d5683c12e67e4dcb5058159e9804",
"shasum": ""
},
"require": {
@@ -10989,7 +10768,7 @@
"sebastian/diff": "^5.0",
"sebastian/environment": "^6.0",
"sebastian/exporter": "^5.0",
- "sebastian/global-state": "^6.0",
+ "sebastian/global-state": "^6.0.1",
"sebastian/object-enumerator": "^5.0",
"sebastian/recursion-context": "^5.0",
"sebastian/type": "^4.0",
@@ -11004,7 +10783,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.2-dev"
+ "dev-main": "10.3-dev"
}
},
"autoload": {
@@ -11036,7 +10815,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.2.6"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.3.1"
},
"funding": [
{
@@ -11052,7 +10831,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-17T12:08:28+00:00"
+ "time": "2023-08-04T06:48:08+00:00"
},
{
"name": "sebastian/cli-parser",
diff --git a/public/css/app.css b/public/css/app.css
index c4b7eacf..8beef372 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -10,7 +10,7 @@
[data-bs-theme=light] {
--bs-blue: #2c3e50;
--bs-indigo: #6610f2;
- --bs-purple: #6f42c1;
+ --bs-purple: #9e7ae0;
--bs-pink: #e83e8c;
--bs-red: #e74c3c;
--bs-orange: #fd7e14;
@@ -15680,45 +15680,45 @@ input[type=file].form-control {
}
}
.bmx-text-purple {
- color: rgba(111, 66, 193, var(--bmx-text-opacity)) !important;
+ color: rgba(158, 122, 224, var(--bmx-text-opacity)) !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-text-purple {
- color: rgba(111, 66, 193, var(--bmx-text-opacity)) !important;
+ color: rgba(158, 122, 224, var(--bmx-text-opacity)) !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-text-purple {
- color: rgba(111, 66, 193, var(--bmx-text-opacity)) !important;
+ color: rgba(158, 122, 224, var(--bmx-text-opacity)) !important;
}
}
.bmx-text-purple-light {
- color: rgba(197, 179, 230, var(--bmx-text-opacity)) !important;
+ color: rgba(216, 202, 243, var(--bmx-text-opacity)) !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-text-purple-light {
- color: rgba(197, 179, 230, var(--bmx-text-opacity)) !important;
+ color: rgba(216, 202, 243, var(--bmx-text-opacity)) !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-text-purple-light {
- color: rgba(197, 179, 230, var(--bmx-text-opacity)) !important;
+ color: rgba(216, 202, 243, var(--bmx-text-opacity)) !important;
}
}
.bmx-text-purple-dark {
- color: rgba(67, 40, 116, var(--bmx-text-opacity)) !important;
+ color: rgba(95, 73, 134, var(--bmx-text-opacity)) !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-text-purple-dark {
- color: rgba(67, 40, 116, var(--bmx-text-opacity)) !important;
+ color: rgba(95, 73, 134, var(--bmx-text-opacity)) !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-text-purple-dark {
- color: rgba(67, 40, 116, var(--bmx-text-opacity)) !important;
+ color: rgba(95, 73, 134, var(--bmx-text-opacity)) !important;
}
}
.bmx-text-pink {
@@ -16338,45 +16338,45 @@ input[type=file].form-control {
}
}
.bmx-text-purple-hover:hover {
- color: rgba(111, 66, 193, var(--bmx-text-opacity)) !important;
+ color: rgba(158, 122, 224, var(--bmx-text-opacity)) !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-text-purple-hover:hover {
- color: rgba(111, 66, 193, var(--bmx-text-opacity)) !important;
+ color: rgba(158, 122, 224, var(--bmx-text-opacity)) !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-text-purple-hover:hover {
- color: rgba(111, 66, 193, var(--bmx-text-opacity)) !important;
+ color: rgba(158, 122, 224, var(--bmx-text-opacity)) !important;
}
}
.bmx-text-purple-light-hover:hover {
- color: rgba(197, 179, 230, var(--bmx-text-opacity)) !important;
+ color: rgba(216, 202, 243, var(--bmx-text-opacity)) !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-text-purple-light-hover:hover {
- color: rgba(197, 179, 230, var(--bmx-text-opacity)) !important;
+ color: rgba(216, 202, 243, var(--bmx-text-opacity)) !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-text-purple-light-hover:hover {
- color: rgba(197, 179, 230, var(--bmx-text-opacity)) !important;
+ color: rgba(216, 202, 243, var(--bmx-text-opacity)) !important;
}
}
.bmx-text-purple-dark-hover:hover {
- color: rgba(67, 40, 116, var(--bmx-text-opacity)) !important;
+ color: rgba(95, 73, 134, var(--bmx-text-opacity)) !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-text-purple-dark-hover:hover {
- color: rgba(67, 40, 116, var(--bmx-text-opacity)) !important;
+ color: rgba(95, 73, 134, var(--bmx-text-opacity)) !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-text-purple-dark-hover:hover {
- color: rgba(67, 40, 116, var(--bmx-text-opacity)) !important;
+ color: rgba(95, 73, 134, var(--bmx-text-opacity)) !important;
}
}
.bmx-text-pink-hover:hover {
@@ -17128,72 +17128,72 @@ input[type=file].form-control {
}
}
.bmx-link-purple {
- color: #6f42c1;
+ color: #9e7ae0;
}
.bmx-link-purple:hover, .bmx-link-purple:focus {
- color: #6e42c0;
+ color: #9d79df;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-link-purple {
- color: #6f42c1;
+ color: #9e7ae0;
}
.bmx-dark-link-purple:hover, .bmx-dark-link-purple:focus {
- color: #6e42c0;
+ color: #9d79df;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-link-purple {
- color: #6f42c1;
+ color: #9e7ae0;
}
.bmx-light-link-purple:hover, .bmx-light-link-purple:focus {
- color: #6e42c0;
+ color: #9d79df;
}
}
.bmx-link-purple-light {
- color: #c5b3e6;
+ color: #d8caf3;
}
.bmx-link-purple-light:hover, .bmx-link-purple-light:focus {
- color: #c4b2e5;
+ color: #d7c9f2;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-link-purple-light {
- color: #c5b3e6;
+ color: #d8caf3;
}
.bmx-dark-link-purple-light:hover, .bmx-dark-link-purple-light:focus {
- color: #c4b2e5;
+ color: #d7c9f2;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-link-purple-light {
- color: #c5b3e6;
+ color: #d8caf3;
}
.bmx-light-link-purple-light:hover, .bmx-light-link-purple-light:focus {
- color: #c4b2e5;
+ color: #d7c9f2;
}
}
.bmx-link-purple-dark {
- color: #432874;
+ color: #5f4986;
}
.bmx-link-purple-dark:hover, .bmx-link-purple-dark:focus {
- color: #432873;
+ color: #5f4985;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-link-purple-dark {
- color: #432874;
+ color: #5f4986;
}
.bmx-dark-link-purple-dark:hover, .bmx-dark-link-purple-dark:focus {
- color: #432873;
+ color: #5f4985;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-link-purple-dark {
- color: #432874;
+ color: #5f4986;
}
.bmx-light-link-purple-dark:hover, .bmx-light-link-purple-dark:focus {
- color: #432873;
+ color: #5f4985;
}
}
.bmx-link-pink {
@@ -18153,45 +18153,45 @@ input[type=file].form-control {
}
}
.bmx-td-purple {
- text-decoration-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
@media (prefers-color-scheme: dark) {
.bmx-dark-td-purple {
- text-decoration-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
}
@media (prefers-color-scheme: light) {
.bmx-light-td-purple {
- text-decoration-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
}
.bmx-td-purple-light {
- text-decoration-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
@media (prefers-color-scheme: dark) {
.bmx-dark-td-purple-light {
- text-decoration-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
}
@media (prefers-color-scheme: light) {
.bmx-light-td-purple-light {
- text-decoration-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
}
.bmx-td-purple-dark {
- text-decoration-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
@media (prefers-color-scheme: dark) {
.bmx-dark-td-purple-dark {
- text-decoration-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
}
@media (prefers-color-scheme: light) {
.bmx-light-td-purple-dark {
- text-decoration-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ text-decoration-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
}
.bmx-td-pink {
@@ -19140,161 +19140,161 @@ input[type=file].form-control {
}
.bmx-btn-purple {
--bs-btn-color: #fff;
- --bs-btn-bg: #6f42c1;
- --bs-btn-border-color: #6f42c1;
+ --bs-btn-bg: #9e7ae0;
+ --bs-btn-border-color: #9e7ae0;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #5e38a4;
- --bs-btn-hover-border-color: #59359a;
- --bs-btn-focus-shadow-rgb: 133, 94, 202;
+ --bs-btn-hover-bg: #8668be;
+ --bs-btn-hover-border-color: #7e62b3;
+ --bs-btn-focus-shadow-rgb: 173, 142, 229;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #59359a;
- --bs-btn-active-border-color: #533291;
+ --bs-btn-active-bg: #7e62b3;
+ --bs-btn-active-border-color: #775ca8;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #fff;
- --bs-btn-disabled-bg: #6f42c1;
- --bs-btn-disabled-border-color: #6f42c1;
+ --bs-btn-disabled-bg: #9e7ae0;
+ --bs-btn-disabled-border-color: #9e7ae0;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-btn-purple {
--bs-btn-color: #fff;
- --bs-btn-bg: #6f42c1;
- --bs-btn-border-color: #6f42c1;
+ --bs-btn-bg: #9e7ae0;
+ --bs-btn-border-color: #9e7ae0;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #5e38a4;
- --bs-btn-hover-border-color: #59359a;
- --bs-btn-focus-shadow-rgb: 133, 94, 202;
+ --bs-btn-hover-bg: #8668be;
+ --bs-btn-hover-border-color: #7e62b3;
+ --bs-btn-focus-shadow-rgb: 173, 142, 229;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #59359a;
- --bs-btn-active-border-color: #533291;
+ --bs-btn-active-bg: #7e62b3;
+ --bs-btn-active-border-color: #775ca8;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #fff;
- --bs-btn-disabled-bg: #6f42c1;
- --bs-btn-disabled-border-color: #6f42c1;
+ --bs-btn-disabled-bg: #9e7ae0;
+ --bs-btn-disabled-border-color: #9e7ae0;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-btn-purple {
--bs-btn-color: #fff;
- --bs-btn-bg: #6f42c1;
- --bs-btn-border-color: #6f42c1;
+ --bs-btn-bg: #9e7ae0;
+ --bs-btn-border-color: #9e7ae0;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #5e38a4;
- --bs-btn-hover-border-color: #59359a;
- --bs-btn-focus-shadow-rgb: 133, 94, 202;
+ --bs-btn-hover-bg: #8668be;
+ --bs-btn-hover-border-color: #7e62b3;
+ --bs-btn-focus-shadow-rgb: 173, 142, 229;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #59359a;
- --bs-btn-active-border-color: #533291;
+ --bs-btn-active-bg: #7e62b3;
+ --bs-btn-active-border-color: #775ca8;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #fff;
- --bs-btn-disabled-bg: #6f42c1;
- --bs-btn-disabled-border-color: #6f42c1;
+ --bs-btn-disabled-bg: #9e7ae0;
+ --bs-btn-disabled-border-color: #9e7ae0;
}
}
.bmx-btn-purple-light {
--bs-btn-color: #000;
- --bs-btn-bg: #c5b3e6;
- --bs-btn-border-color: #c5b3e6;
+ --bs-btn-bg: #d8caf3;
+ --bs-btn-border-color: #d8caf3;
--bs-btn-hover-color: #000;
- --bs-btn-hover-bg: #cebeea;
- --bs-btn-hover-border-color: #cbbbe9;
- --bs-btn-focus-shadow-rgb: 167, 152, 196;
+ --bs-btn-hover-bg: #ded2f5;
+ --bs-btn-hover-border-color: #dccff4;
+ --bs-btn-focus-shadow-rgb: 184, 172, 207;
--bs-btn-active-color: #000;
- --bs-btn-active-bg: #d1c2eb;
- --bs-btn-active-border-color: #cbbbe9;
+ --bs-btn-active-bg: #e0d5f5;
+ --bs-btn-active-border-color: #dccff4;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #000;
- --bs-btn-disabled-bg: #c5b3e6;
- --bs-btn-disabled-border-color: #c5b3e6;
+ --bs-btn-disabled-bg: #d8caf3;
+ --bs-btn-disabled-border-color: #d8caf3;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-btn-purple-light {
--bs-btn-color: #000;
- --bs-btn-bg: #c5b3e6;
- --bs-btn-border-color: #c5b3e6;
+ --bs-btn-bg: #d8caf3;
+ --bs-btn-border-color: #d8caf3;
--bs-btn-hover-color: #000;
- --bs-btn-hover-bg: #cebeea;
- --bs-btn-hover-border-color: #cbbbe9;
- --bs-btn-focus-shadow-rgb: 167, 152, 196;
+ --bs-btn-hover-bg: #ded2f5;
+ --bs-btn-hover-border-color: #dccff4;
+ --bs-btn-focus-shadow-rgb: 184, 172, 207;
--bs-btn-active-color: #000;
- --bs-btn-active-bg: #d1c2eb;
- --bs-btn-active-border-color: #cbbbe9;
+ --bs-btn-active-bg: #e0d5f5;
+ --bs-btn-active-border-color: #dccff4;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #000;
- --bs-btn-disabled-bg: #c5b3e6;
- --bs-btn-disabled-border-color: #c5b3e6;
+ --bs-btn-disabled-bg: #d8caf3;
+ --bs-btn-disabled-border-color: #d8caf3;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-btn-purple-light {
--bs-btn-color: #000;
- --bs-btn-bg: #c5b3e6;
- --bs-btn-border-color: #c5b3e6;
+ --bs-btn-bg: #d8caf3;
+ --bs-btn-border-color: #d8caf3;
--bs-btn-hover-color: #000;
- --bs-btn-hover-bg: #cebeea;
- --bs-btn-hover-border-color: #cbbbe9;
- --bs-btn-focus-shadow-rgb: 167, 152, 196;
+ --bs-btn-hover-bg: #ded2f5;
+ --bs-btn-hover-border-color: #dccff4;
+ --bs-btn-focus-shadow-rgb: 184, 172, 207;
--bs-btn-active-color: #000;
- --bs-btn-active-bg: #d1c2eb;
- --bs-btn-active-border-color: #cbbbe9;
+ --bs-btn-active-bg: #e0d5f5;
+ --bs-btn-active-border-color: #dccff4;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #000;
- --bs-btn-disabled-bg: #c5b3e6;
- --bs-btn-disabled-border-color: #c5b3e6;
+ --bs-btn-disabled-bg: #d8caf3;
+ --bs-btn-disabled-border-color: #d8caf3;
}
}
.bmx-btn-purple-dark {
--bs-btn-color: #fff;
- --bs-btn-bg: #432874;
- --bs-btn-border-color: #432874;
+ --bs-btn-bg: #5f4986;
+ --bs-btn-border-color: #5f4986;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #392263;
- --bs-btn-hover-border-color: #36205d;
- --bs-btn-focus-shadow-rgb: 95, 72, 137;
+ --bs-btn-hover-bg: #513e72;
+ --bs-btn-hover-border-color: #4c3a6b;
+ --bs-btn-focus-shadow-rgb: 119, 100, 152;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #36205d;
- --bs-btn-active-border-color: #321e57;
+ --bs-btn-active-bg: #4c3a6b;
+ --bs-btn-active-border-color: #473765;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #fff;
- --bs-btn-disabled-bg: #432874;
- --bs-btn-disabled-border-color: #432874;
+ --bs-btn-disabled-bg: #5f4986;
+ --bs-btn-disabled-border-color: #5f4986;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-btn-purple-dark {
--bs-btn-color: #fff;
- --bs-btn-bg: #432874;
- --bs-btn-border-color: #432874;
+ --bs-btn-bg: #5f4986;
+ --bs-btn-border-color: #5f4986;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #392263;
- --bs-btn-hover-border-color: #36205d;
- --bs-btn-focus-shadow-rgb: 95, 72, 137;
+ --bs-btn-hover-bg: #513e72;
+ --bs-btn-hover-border-color: #4c3a6b;
+ --bs-btn-focus-shadow-rgb: 119, 100, 152;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #36205d;
- --bs-btn-active-border-color: #321e57;
+ --bs-btn-active-bg: #4c3a6b;
+ --bs-btn-active-border-color: #473765;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #fff;
- --bs-btn-disabled-bg: #432874;
- --bs-btn-disabled-border-color: #432874;
+ --bs-btn-disabled-bg: #5f4986;
+ --bs-btn-disabled-border-color: #5f4986;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-btn-purple-dark {
--bs-btn-color: #fff;
- --bs-btn-bg: #432874;
- --bs-btn-border-color: #432874;
+ --bs-btn-bg: #5f4986;
+ --bs-btn-border-color: #5f4986;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #392263;
- --bs-btn-hover-border-color: #36205d;
- --bs-btn-focus-shadow-rgb: 95, 72, 137;
+ --bs-btn-hover-bg: #513e72;
+ --bs-btn-hover-border-color: #4c3a6b;
+ --bs-btn-focus-shadow-rgb: 119, 100, 152;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #36205d;
- --bs-btn-active-border-color: #321e57;
+ --bs-btn-active-bg: #4c3a6b;
+ --bs-btn-active-border-color: #473765;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-disabled-color: #fff;
- --bs-btn-disabled-bg: #432874;
- --bs-btn-disabled-border-color: #432874;
+ --bs-btn-disabled-bg: #5f4986;
+ --bs-btn-disabled-border-color: #5f4986;
}
}
.bmx-btn-pink {
@@ -21630,161 +21630,161 @@ input[type=file].form-control {
}
}
.bmx-btn-outline-purple {
- --bs-btn-color: #6f42c1;
- --bs-btn-border-color: #6f42c1;
+ --bs-btn-color: #9e7ae0;
+ --bs-btn-border-color: #9e7ae0;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #6f42c1;
- --bs-btn-hover-border-color: #6f42c1;
- --bs-btn-focus-shadow-rgb: 111, 66, 193;
+ --bs-btn-hover-bg: #9e7ae0;
+ --bs-btn-hover-border-color: #9e7ae0;
+ --bs-btn-focus-shadow-rgb: 158, 122, 224;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #6f42c1;
- --bs-btn-active-border-color: #6f42c1;
+ --bs-btn-active-bg: #9e7ae0;
+ --bs-btn-active-border-color: #9e7ae0;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #6f42c1;
+ --bs-btn-disabled-color: #9e7ae0;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #6f42c1;
+ --bs-btn-disabled-border-color: #9e7ae0;
--bs-gradient: none;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-btn-outline-purple {
- --bs-btn-color: #6f42c1;
- --bs-btn-border-color: #6f42c1;
+ --bs-btn-color: #9e7ae0;
+ --bs-btn-border-color: #9e7ae0;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #6f42c1;
- --bs-btn-hover-border-color: #6f42c1;
- --bs-btn-focus-shadow-rgb: 111, 66, 193;
+ --bs-btn-hover-bg: #9e7ae0;
+ --bs-btn-hover-border-color: #9e7ae0;
+ --bs-btn-focus-shadow-rgb: 158, 122, 224;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #6f42c1;
- --bs-btn-active-border-color: #6f42c1;
+ --bs-btn-active-bg: #9e7ae0;
+ --bs-btn-active-border-color: #9e7ae0;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #6f42c1;
+ --bs-btn-disabled-color: #9e7ae0;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #6f42c1;
+ --bs-btn-disabled-border-color: #9e7ae0;
--bs-gradient: none;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-btn-outline-purple {
- --bs-btn-color: #6f42c1;
- --bs-btn-border-color: #6f42c1;
+ --bs-btn-color: #9e7ae0;
+ --bs-btn-border-color: #9e7ae0;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #6f42c1;
- --bs-btn-hover-border-color: #6f42c1;
- --bs-btn-focus-shadow-rgb: 111, 66, 193;
+ --bs-btn-hover-bg: #9e7ae0;
+ --bs-btn-hover-border-color: #9e7ae0;
+ --bs-btn-focus-shadow-rgb: 158, 122, 224;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #6f42c1;
- --bs-btn-active-border-color: #6f42c1;
+ --bs-btn-active-bg: #9e7ae0;
+ --bs-btn-active-border-color: #9e7ae0;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #6f42c1;
+ --bs-btn-disabled-color: #9e7ae0;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #6f42c1;
+ --bs-btn-disabled-border-color: #9e7ae0;
--bs-gradient: none;
}
}
.bmx-btn-outline-purple-light {
- --bs-btn-color: #c5b3e6;
- --bs-btn-border-color: #c5b3e6;
+ --bs-btn-color: #d8caf3;
+ --bs-btn-border-color: #d8caf3;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #c5b3e6;
- --bs-btn-hover-border-color: #c5b3e6;
- --bs-btn-focus-shadow-rgb: 197, 179, 230;
+ --bs-btn-hover-bg: #d8caf3;
+ --bs-btn-hover-border-color: #d8caf3;
+ --bs-btn-focus-shadow-rgb: 216, 202, 243;
--bs-btn-active-color: #000;
- --bs-btn-active-bg: #c5b3e6;
- --bs-btn-active-border-color: #c5b3e6;
+ --bs-btn-active-bg: #d8caf3;
+ --bs-btn-active-border-color: #d8caf3;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #c5b3e6;
+ --bs-btn-disabled-color: #d8caf3;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #c5b3e6;
+ --bs-btn-disabled-border-color: #d8caf3;
--bs-gradient: none;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-btn-outline-purple-light {
- --bs-btn-color: #c5b3e6;
- --bs-btn-border-color: #c5b3e6;
+ --bs-btn-color: #d8caf3;
+ --bs-btn-border-color: #d8caf3;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #c5b3e6;
- --bs-btn-hover-border-color: #c5b3e6;
- --bs-btn-focus-shadow-rgb: 197, 179, 230;
+ --bs-btn-hover-bg: #d8caf3;
+ --bs-btn-hover-border-color: #d8caf3;
+ --bs-btn-focus-shadow-rgb: 216, 202, 243;
--bs-btn-active-color: #000;
- --bs-btn-active-bg: #c5b3e6;
- --bs-btn-active-border-color: #c5b3e6;
+ --bs-btn-active-bg: #d8caf3;
+ --bs-btn-active-border-color: #d8caf3;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #c5b3e6;
+ --bs-btn-disabled-color: #d8caf3;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #c5b3e6;
+ --bs-btn-disabled-border-color: #d8caf3;
--bs-gradient: none;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-btn-outline-purple-light {
- --bs-btn-color: #c5b3e6;
- --bs-btn-border-color: #c5b3e6;
+ --bs-btn-color: #d8caf3;
+ --bs-btn-border-color: #d8caf3;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #c5b3e6;
- --bs-btn-hover-border-color: #c5b3e6;
- --bs-btn-focus-shadow-rgb: 197, 179, 230;
+ --bs-btn-hover-bg: #d8caf3;
+ --bs-btn-hover-border-color: #d8caf3;
+ --bs-btn-focus-shadow-rgb: 216, 202, 243;
--bs-btn-active-color: #000;
- --bs-btn-active-bg: #c5b3e6;
- --bs-btn-active-border-color: #c5b3e6;
+ --bs-btn-active-bg: #d8caf3;
+ --bs-btn-active-border-color: #d8caf3;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #c5b3e6;
+ --bs-btn-disabled-color: #d8caf3;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #c5b3e6;
+ --bs-btn-disabled-border-color: #d8caf3;
--bs-gradient: none;
}
}
.bmx-btn-outline-purple-dark {
- --bs-btn-color: #432874;
- --bs-btn-border-color: #432874;
+ --bs-btn-color: #5f4986;
+ --bs-btn-border-color: #5f4986;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #432874;
- --bs-btn-hover-border-color: #432874;
- --bs-btn-focus-shadow-rgb: 67, 40, 116;
+ --bs-btn-hover-bg: #5f4986;
+ --bs-btn-hover-border-color: #5f4986;
+ --bs-btn-focus-shadow-rgb: 95, 73, 134;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #432874;
- --bs-btn-active-border-color: #432874;
+ --bs-btn-active-bg: #5f4986;
+ --bs-btn-active-border-color: #5f4986;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #432874;
+ --bs-btn-disabled-color: #5f4986;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #432874;
+ --bs-btn-disabled-border-color: #5f4986;
--bs-gradient: none;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-btn-outline-purple-dark {
- --bs-btn-color: #432874;
- --bs-btn-border-color: #432874;
+ --bs-btn-color: #5f4986;
+ --bs-btn-border-color: #5f4986;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #432874;
- --bs-btn-hover-border-color: #432874;
- --bs-btn-focus-shadow-rgb: 67, 40, 116;
+ --bs-btn-hover-bg: #5f4986;
+ --bs-btn-hover-border-color: #5f4986;
+ --bs-btn-focus-shadow-rgb: 95, 73, 134;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #432874;
- --bs-btn-active-border-color: #432874;
+ --bs-btn-active-bg: #5f4986;
+ --bs-btn-active-border-color: #5f4986;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #432874;
+ --bs-btn-disabled-color: #5f4986;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #432874;
+ --bs-btn-disabled-border-color: #5f4986;
--bs-gradient: none;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-btn-outline-purple-dark {
- --bs-btn-color: #432874;
- --bs-btn-border-color: #432874;
+ --bs-btn-color: #5f4986;
+ --bs-btn-border-color: #5f4986;
--bs-btn-hover-color: #fff;
- --bs-btn-hover-bg: #432874;
- --bs-btn-hover-border-color: #432874;
- --bs-btn-focus-shadow-rgb: 67, 40, 116;
+ --bs-btn-hover-bg: #5f4986;
+ --bs-btn-hover-border-color: #5f4986;
+ --bs-btn-focus-shadow-rgb: 95, 73, 134;
--bs-btn-active-color: #fff;
- --bs-btn-active-bg: #432874;
- --bs-btn-active-border-color: #432874;
+ --bs-btn-active-bg: #5f4986;
+ --bs-btn-active-border-color: #5f4986;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --bs-btn-disabled-color: #432874;
+ --bs-btn-disabled-color: #5f4986;
--bs-btn-disabled-bg: transparent;
- --bs-btn-disabled-border-color: #432874;
+ --bs-btn-disabled-border-color: #5f4986;
--bs-gradient: none;
}
}
@@ -23995,81 +23995,81 @@ input[type=file].form-control {
}
}
.bmx-border-purple {
- border-color: #6f42c1 !important;
+ border-color: #9e7ae0 !important;
}
.bmx-border-purple-hover:hover {
- border-color: #6f42c1 !important;
+ border-color: #9e7ae0 !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-border-purple {
- border-color: #6f42c1 !important;
+ border-color: #9e7ae0 !important;
}
.bmx-dark-border-purple-hover:hover {
- border-color: #6f42c1 !important;
+ border-color: #9e7ae0 !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-border-purple {
- border-color: #6f42c1 !important;
+ border-color: #9e7ae0 !important;
}
.bmx-light-border-purple-hover:hover {
- border-color: #6f42c1 !important;
+ border-color: #9e7ae0 !important;
}
}
.bmx-border-purple-light {
- border-color: #c5b3e6 !important;
+ border-color: #d8caf3 !important;
}
.bmx-border-purple-light-hover:hover {
- border-color: #c5b3e6 !important;
+ border-color: #d8caf3 !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-border-purple-light {
- border-color: #c5b3e6 !important;
+ border-color: #d8caf3 !important;
}
.bmx-dark-border-purple-light-hover:hover {
- border-color: #c5b3e6 !important;
+ border-color: #d8caf3 !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-border-purple-light {
- border-color: #c5b3e6 !important;
+ border-color: #d8caf3 !important;
}
.bmx-light-border-purple-light-hover:hover {
- border-color: #c5b3e6 !important;
+ border-color: #d8caf3 !important;
}
}
.bmx-border-purple-dark {
- border-color: #432874 !important;
+ border-color: #5f4986 !important;
}
.bmx-border-purple-dark-hover:hover {
- border-color: #432874 !important;
+ border-color: #5f4986 !important;
}
@media (prefers-color-scheme: dark) {
.bmx-dark-border-purple-dark {
- border-color: #432874 !important;
+ border-color: #5f4986 !important;
}
.bmx-dark-border-purple-dark-hover:hover {
- border-color: #432874 !important;
+ border-color: #5f4986 !important;
}
}
@media (prefers-color-scheme: light) {
.bmx-light-border-purple-dark {
- border-color: #432874 !important;
+ border-color: #5f4986 !important;
}
.bmx-light-border-purple-dark-hover:hover {
- border-color: #432874 !important;
+ border-color: #5f4986 !important;
}
}
.bmx-border-pink {
@@ -25227,81 +25227,81 @@ input[type=file].form-control {
}
}
.bmx-bg-purple {
- background-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ background-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
.bmx-bg-purple-hover:hover {
- background-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ background-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
@media (prefers-color-scheme: dark) {
.bmx-dark-bg-purple {
- background-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ background-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
.bmx-dark-bg-purple-hover:hover {
- background-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ background-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
}
@media (prefers-color-scheme: light) {
.bmx-light-bg-purple {
- background-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ background-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
.bmx-light-bg-purple-hover:hover {
- background-color: rgba(111, 66, 193, var(--bmx-bg-opacity));
+ background-color: rgba(158, 122, 224, var(--bmx-bg-opacity));
}
}
.bmx-bg-purple-light {
- background-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ background-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
.bmx-bg-purple-light-hover:hover {
- background-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ background-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
@media (prefers-color-scheme: dark) {
.bmx-dark-bg-purple-light {
- background-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ background-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
.bmx-dark-bg-purple-light-hover:hover {
- background-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ background-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
}
@media (prefers-color-scheme: light) {
.bmx-light-bg-purple-light {
- background-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ background-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
.bmx-light-bg-purple-light-hover:hover {
- background-color: rgba(197, 179, 230, var(--bmx-bg-opacity));
+ background-color: rgba(216, 202, 243, var(--bmx-bg-opacity));
}
}
.bmx-bg-purple-dark {
- background-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ background-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
.bmx-bg-purple-dark-hover:hover {
- background-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ background-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
@media (prefers-color-scheme: dark) {
.bmx-dark-bg-purple-dark {
- background-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ background-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
.bmx-dark-bg-purple-dark-hover:hover {
- background-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ background-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
}
@media (prefers-color-scheme: light) {
.bmx-light-bg-purple-dark {
- background-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ background-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
.bmx-light-bg-purple-dark-hover:hover {
- background-color: rgba(67, 40, 116, var(--bmx-bg-opacity));
+ background-color: rgba(95, 73, 134, var(--bmx-bg-opacity));
}
}
.bmx-bg-pink {
diff --git a/public/js/app.js b/public/js/app.js
index a776d4b0..5fe52fd4 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -22002,8 +22002,6 @@ __webpack_require__(/*! ./script-components/ajax-forms */ "./resources/js/script
// UI UX level components
__webpack_require__(/*! ./script-components/tooltips */ "./resources/js/script-components/tooltips.js");
__webpack_require__(/*! ./script-components/clipboard */ "./resources/js/script-components/clipboard.js");
-__webpack_require__(/*! ./script-components/subscription-create */ "./resources/js/script-components/subscription-create.js");
-__webpack_require__(/*! ./script-components/subscription-payment-method */ "./resources/js/script-components/subscription-payment-method.js");
/***/ }),
@@ -22255,170 +22253,6 @@ document.addEventListener('DOMContentLoaded', function (event) {
/***/ }),
-/***/ "./resources/js/script-components/subscription-create.js":
-/*!***************************************************************!*\
- !*** ./resources/js/script-components/subscription-create.js ***!
- \***************************************************************/
-/***/ (() => {
-
-function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
-function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
-function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
-function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
-var subscriptionForm = document.getElementById('subscription-form');
-if (subscriptionForm) {
- var _color = !window.matchMedia('(prefers-color-scheme: dark)').matches ? '#111' : '#FFF';
- var stripe = window.Stripe(window.stripe_key);
- var elements = stripe.elements();
- var cardElement = elements.create('card', {
- style: {
- base: {
- color: _color
- }
- },
- hidePostalCode: true
- });
- cardElement.mount('#card-element');
- var cardHolderPlan = document.getElementById('card-holder-plan');
- var cardHolderName = document.getElementById('card-holder-name');
- var cardHolderEmail = document.getElementById('card-holder-email');
- var cardHolderState = document.getElementById('card-holder-state');
- var cardHolderCountry = document.getElementById('card-holder-country');
- var cardButton = document.getElementById('card-button');
- var clientSecret = cardButton.dataset.secret;
- cardButton.addEventListener('click', /*#__PURE__*/function () {
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {
- var _yield$stripe$confirm, setupIntent, error;
- return _regeneratorRuntime().wrap(function _callee$(_context) {
- while (1) switch (_context.prev = _context.next) {
- case 0:
- if (!(cardHolderPlan.value == '' || cardHolderName.value == '' || cardHolderEmail.value == '' || cardHolderState.value == '' || cardHolderCountry.value == '')) {
- _context.next = 3;
- break;
- }
- window.notify.warning('Please complete all fields.');
- return _context.abrupt("return", false);
- case 3:
- cardButton.disabled = true;
- _context.next = 6;
- return stripe.confirmCardSetup(clientSecret, {
- payment_method: {
- card: cardElement,
- billing_details: {
- name: cardHolderName.value
- }
- }
- });
- case 6:
- _yield$stripe$confirm = _context.sent;
- setupIntent = _yield$stripe$confirm.setupIntent;
- error = _yield$stripe$confirm.error;
- if (error) {
- window.notify.warning(error.message);
- cardButton.disabled = false;
- } else {
- window.app.pending();
- window.axios.post(route('ajax.billing.subscription.create'), {
- plan: cardHolderPlan.value,
- name: cardHolderName.value,
- email: cardHolderEmail.value,
- state: cardHolderState.value,
- country: cardHolderCountry.value,
- payment_method: setupIntent.payment_method
- }).then(function (results) {
- window.location = route('user.billing.details');
- })["catch"](function (err) {
- window.notify.warning(err.data.data.message);
- if (err.data.data.redirect) {
- window.location = err.data.data.redirect;
- }
- });
- }
- case 10:
- case "end":
- return _context.stop();
- }
- }, _callee);
- }));
- return function (_x) {
- return _ref.apply(this, arguments);
- };
- }());
-}
-
-/***/ }),
-
-/***/ "./resources/js/script-components/subscription-payment-method.js":
-/*!***********************************************************************!*\
- !*** ./resources/js/script-components/subscription-payment-method.js ***!
- \***********************************************************************/
-/***/ (() => {
-
-function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
-function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
-function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
-function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
-var paymentMethodForm = document.getElementById('payment-method-form');
-if (paymentMethodForm) {
- var _color = !window.matchMedia('(prefers-color-scheme: dark)').matches ? '#111' : '#FFF';
- var stripe = window.Stripe(window.stripe_key);
- var elements = stripe.elements();
- var cardElement = elements.create('card', {
- style: {
- base: {
- color: _color
- }
- },
- hidePostalCode: true
- });
- cardElement.mount('#card-element');
- var cardButton = document.getElementById('card-button');
- var clientSecret = cardButton.dataset.secret;
- cardButton.addEventListener('click', /*#__PURE__*/function () {
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {
- var _yield$stripe$confirm, setupIntent, error;
- return _regeneratorRuntime().wrap(function _callee$(_context) {
- while (1) switch (_context.prev = _context.next) {
- case 0:
- cardButton.disabled = true;
- window.app.pending();
- _context.next = 4;
- return stripe.confirmCardSetup(clientSecret, {
- payment_method: {
- card: cardElement
- }
- });
- case 4:
- _yield$stripe$confirm = _context.sent;
- setupIntent = _yield$stripe$confirm.setupIntent;
- error = _yield$stripe$confirm.error;
- if (error) {
- window.app.pendingHide();
- window.notify.warning(error.message);
- cardButton.disabled = false;
- } else {
- window.axios.post(route('ajax.billing.subscription.payment-method'), {
- payment_method: setupIntent.payment_method
- }).then(function (results) {
- window.location = route('user.billing.details');
- })["catch"](function (err) {
- window.notify.warning(err.data.data.message);
- });
- }
- case 8:
- case "end":
- return _context.stop();
- }
- }, _callee);
- }));
- return function (_x) {
- return _ref.apply(this, arguments);
- };
- }());
-}
-
-/***/ }),
-
/***/ "./resources/js/script-components/tooltips.js":
/*!****************************************************!*\
!*** ./resources/js/script-components/tooltips.js ***!
diff --git a/resources/js/script-components.js b/resources/js/script-components.js
index 9be18f5b..1eeac27c 100644
--- a/resources/js/script-components.js
+++ b/resources/js/script-components.js
@@ -13,6 +13,3 @@ require('./script-components/ajax-forms');
// UI UX level components
require('./script-components/tooltips');
require('./script-components/clipboard');
-
-require('./script-components/subscription-create');
-require('./script-components/subscription-payment-method');
diff --git a/resources/js/script-components/subscription-create.js b/resources/js/script-components/subscription-create.js
deleted file mode 100644
index e15b9a80..00000000
--- a/resources/js/script-components/subscription-create.js
+++ /dev/null
@@ -1,74 +0,0 @@
-const subscriptionForm = document.getElementById('subscription-form');
-
-if (subscriptionForm) {
- let _color = (! window.matchMedia('(prefers-color-scheme: dark)').matches) ? '#111' : '#FFF';
-
- const stripe = window.Stripe(window.stripe_key);
- const elements = stripe.elements();
- const cardElement = elements.create('card', {
- style: { base: { color: _color } },
- hidePostalCode: true
- });
-
- cardElement.mount('#card-element');
-
- const cardHolderPlan = document.getElementById('card-holder-plan');
- const cardHolderName = document.getElementById('card-holder-name');
- const cardHolderEmail = document.getElementById('card-holder-email');
- const cardHolderState = document.getElementById('card-holder-state');
- const cardHolderCountry = document.getElementById('card-holder-country');
- const cardButton = document.getElementById('card-button');
- const clientSecret = cardButton.dataset.secret;
-
- cardButton.addEventListener('click', async (e) => {
- if (
- cardHolderPlan.value == ''
- || cardHolderName.value == ''
- || cardHolderEmail.value == ''
- || cardHolderState.value == ''
- || cardHolderCountry.value == ''
- ) {
- window.notify.warning('Please complete all fields.');
-
- return false;
- }
-
- cardButton.disabled = true;
-
- const { setupIntent, error } = await stripe.confirmCardSetup(
- clientSecret, {
- payment_method: {
- card: cardElement,
- billing_details: {
- name: cardHolderName.value
- }
- }
- }
- );
-
- if (error) {
- window.notify.warning(error.message);
- cardButton.disabled = false;
- } else {
- window.app.pending();
- window.axios.post(route('ajax.billing.subscription.create'), {
- plan: cardHolderPlan.value,
- name: cardHolderName.value,
- email: cardHolderEmail.value,
- state: cardHolderState.value,
- country: cardHolderCountry.value,
- payment_method: setupIntent.payment_method
- })
- .then((results) => {
- window.location = route('user.billing.details');
- })
- .catch((err) => {
- window.notify.warning(err.data.data.message);
-
- if (err.data.data.redirect) {
- window.location = err.data.data.redirect;
- }
- });
- }
- });
-}
diff --git a/resources/js/script-components/subscription-payment-method.js b/resources/js/script-components/subscription-payment-method.js
deleted file mode 100644
index 15f0d732..00000000
--- a/resources/js/script-components/subscription-payment-method.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const paymentMethodForm = document.getElementById('payment-method-form');
-
-if (paymentMethodForm) {
- let _color = (! window.matchMedia('(prefers-color-scheme: dark)').matches) ? '#111' : '#FFF';
-
- const stripe = window.Stripe(window.stripe_key);
- const elements = stripe.elements();
- const cardElement = elements.create('card', {
- style: { base: { color: _color } },
- hidePostalCode: true
- });
-
- cardElement.mount('#card-element');
-
- const cardButton = document.getElementById('card-button');
- const clientSecret = cardButton.dataset.secret;
-
- cardButton.addEventListener('click', async (e) => {
- cardButton.disabled = true;
- window.app.pending();
-
- const { setupIntent, error } = await stripe.confirmCardSetup(
- clientSecret, {
- payment_method: {
- card: cardElement
- }
- }
- );
-
- if (error) {
- window.app.pendingHide();
- window.notify.warning(error.message);
- cardButton.disabled = false;
- } else {
- window.axios.post(route('ajax.billing.subscription.payment-method'), {
- payment_method: setupIntent.payment_method
- })
- .then((results) => {
- window.location = route('user.billing.details');
- })
- .catch((err) => {
- window.notify.warning(err.data.data.message);
- });
- }
- });
-}
diff --git a/resources/sass/theme/_variables.scss b/resources/sass/theme/_variables.scss
index a789bf01..806ae31e 100644
--- a/resources/sass/theme/_variables.scss
+++ b/resources/sass/theme/_variables.scss
@@ -21,7 +21,7 @@ $black: #000 !default;
$blue: #2c3e50 !default;
$indigo: #6610f2 !default;
-$purple: #6f42c1 !default;
+$purple: #9e7ae0 !default;
$pink: #e83e8c !default;
$red: #e74c3c !default;
$orange: #fd7e14 !default;
diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php
index 20715a23..c22139e8 100644
--- a/resources/views/dashboard.blade.php
+++ b/resources/views/dashboard.blade.php
@@ -29,7 +29,7 @@
@stop
@section('content')
-
{{ $user->subscriptionPlan('name') }}
+{{ $upcomingPayment->total() }} on {{ $upcomingPayment->date()->format('M jS, Y') }}
+Please add a Payment Method in your Billing Portal
+Please access your billing portal to handle the following:
+In order to access your billing portal, please update your billing information.
+ @endif +Ends At | -{{ $subscription->ends_at->format('F j, Y') }} | -
---|
Date | -Identifier | -Dollars | - - - @foreach($invoices as $invoice) -
---|---|---|
- - - {{ $invoice->date()->format('Y-m-d') }} - - | -{{ $invoice->id }} | -${{ ($invoice->total / 100) }} | -
Date | -Cost | -
---|---|
{{ $invoice->date()->format('F j, Y') }} | -${{ $invoice->total/100 }} | -