Changeset 3399722
- Timestamp:
- 11/20/2025 12:31:15 PM (3 weeks ago)
- Location:
- simplybook/trunk
- Files:
-
- 24 added
- 108 edited
-
app/Controllers/BlockController.php (modified) (4 diffs)
-
app/Controllers/CapabilityController.php (modified) (2 diffs)
-
app/Controllers/DashboardController.php (modified) (4 diffs)
-
app/Controllers/DesignSettingsController.php (modified) (1 diff)
-
app/Controllers/OnboardingNoticeController.php (modified) (1 diff)
-
app/Controllers/ReviewController.php (modified) (1 diff)
-
app/Controllers/ScheduleController.php (modified) (1 diff)
-
app/Controllers/ServicesController.php (modified) (1 diff)
-
app/Controllers/SettingsController.php (modified) (1 diff)
-
app/Controllers/WidgetController.php (modified) (1 diff)
-
app/Controllers/WidgetTrackingController.php (modified) (2 diffs)
-
app/Features/Notifications/Notices/AbstractNotice.php (modified) (1 diff)
-
app/Features/Notifications/Notices/AddMandatoryProviderNotice.php (modified) (3 diffs)
-
app/Features/Notifications/Notices/AddMandatoryServiceNotice.php (modified) (3 diffs)
-
app/Features/Notifications/Notices/FailedAuthenticationNotice.php (modified) (2 diffs)
-
app/Features/Notifications/Notices/MaxedOutProvidersNotice.php (modified) (3 diffs)
-
app/Features/Notifications/Notices/MaxedOutServicesNotice.php (modified) (3 diffs)
-
app/Features/Notifications/Notices/PublishWidgetNotice.php (modified) (2 diffs)
-
app/Features/Notifications/NotificationsController.php (modified) (3 diffs)
-
app/Features/Notifications/NotificationsEndpoints.php (modified) (1 diff)
-
app/Features/Onboarding/OnboardingController.php (modified) (17 diffs)
-
app/Features/Onboarding/OnboardingService.php (modified) (2 diffs)
-
app/Features/TaskManagement/TaskManagementController.php (modified) (3 diffs)
-
app/Features/TaskManagement/TaskManagementEndpoints.php (modified) (2 diffs)
-
app/Features/TaskManagement/TaskManagementListener.php (modified) (3 diffs)
-
app/Features/TaskManagement/TaskManagementService.php (modified) (1 diff)
-
app/Features/TaskManagement/Tasks/AbstractTask.php (modified) (6 diffs)
-
app/Features/TaskManagement/Tasks/AcceptPaymentsTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/AddAllProvidersTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/AddAllServicesTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/AddMandatoryProviderTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/AddMandatoryServiceTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/BlackFridayTask.php (added)
-
app/Features/TaskManagement/Tasks/CustomizeDesignTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/FailedAuthenticationTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/GatherClientInfoTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/GoToSimplyBookSystemTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/InstallAppTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/MaxedOutProvidersTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/MaximumBookingsTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/PostOnSocialMediaTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/PublishWidgetTask.php (modified) (2 diffs)
-
app/Features/TaskManagement/Tasks/TrialExpiredTask.php (modified) (2 diffs)
-
app/Http/ApiClient.php (modified) (45 diffs)
-
app/Http/Endpoints/AbstractCrudEndpoint.php (modified) (10 diffs)
-
app/Http/Endpoints/BlockEndpoints.php (modified) (3 diffs)
-
app/Http/Endpoints/LogOutEndpoint.php (modified) (1 diff)
-
app/Http/Endpoints/NoticesDismissEndpoint.php (modified) (2 diffs)
-
app/Http/Endpoints/SettingEndpoints.php (modified) (1 diff)
-
app/Http/Entities/AbstractEntity.php (modified) (12 diffs)
-
app/Http/Entities/Service.php (modified) (7 diffs)
-
app/Http/Entities/ServiceProvider.php (modified) (8 diffs)
-
app/Interfaces/ControllerInterface.php (modified) (1 diff)
-
app/Interfaces/FeatureInterface.php (modified) (1 diff)
-
app/Interfaces/NoticeInterface.php (modified) (2 diffs)
-
app/Interfaces/ProviderInterface.php (modified) (1 diff)
-
app/Interfaces/TaskInterface.php (modified) (1 diff)
-
app/Managers/AbstractManager.php (modified) (1 diff)
-
app/Managers/EndpointManager.php (modified) (2 diffs)
-
app/Services/CapabilityService.php (modified) (1 diff)
-
app/Services/DesignSettingsService.php (modified) (4 diffs)
-
app/Services/NoticeDismissalService.php (modified) (1 diff)
-
app/Services/PromotionService.php (added)
-
app/Services/RelatedPluginService.php (modified) (1 diff)
-
app/Services/SubscriptionDataService.php (modified) (2 diffs)
-
app/Services/WidgetTrackingService.php (modified) (1 diff)
-
app/Support/Builders/CompanyBuilder.php (modified) (1 diff)
-
app/Support/Builders/PageBuilder.php (modified) (2 diffs)
-
app/Support/Builders/WidgetScriptBuilder.php (modified) (2 diffs)
-
app/Support/Helpers/Request.php (modified) (2 diffs)
-
app/Support/Helpers/Storage.php (modified) (6 diffs)
-
app/Support/Helpers/Uninstall.php (modified) (1 diff)
-
app/Support/Widgets/ElementorWidget.php (modified) (2 diffs)
-
app/Traits/HasApiAccess.php (modified) (1 diff)
-
app/Traits/HasEncryption.php (modified) (2 diffs)
-
app/Traits/HasViews.php (modified) (1 diff)
-
app/Traits/LegacyLoad.php (modified) (2 diffs)
-
app/Traits/LegacySave.php (modified) (7 diffs)
-
assets/block/build/block.json (added)
-
assets/block/build/index.asset.php (added)
-
assets/block/build/index.css (added)
-
assets/block/build/index.js (added)
-
assets/block/build/index.js.map (added)
-
assets/css/tailwind.generated.css (modified) (1 diff)
-
assets/languages/simplybook.pot (modified) (123 diffs)
-
bootstrap/App.php (modified) (7 diffs)
-
bootstrap/Plugin.php (modified) (11 diffs)
-
composer.json (modified) (4 diffs)
-
config/env.php (modified) (3 diffs)
-
config/fields/authentication.php (modified) (1 diff)
-
config/related.php (modified) (2 diffs)
-
react/build/107.e36c77fdbbf228e1331a.js (added)
-
react/build/167.e823be3a69b27a68a9c9.js (added)
-
react/build/18.dda60173f985be980376.js (added)
-
react/build/184.c2aa719fd716b1379e1e.js (added)
-
react/build/201.56742ef93399753e0531.js (added)
-
react/build/236.d6f09e1e37330d9d5c2f.js (added)
-
react/build/249.307f4b603f01b9c80926.js (added)
-
react/build/396.5230a442c76aa96ddbba.js (added)
-
react/build/418.e5c5642c4b06b7aa1540.js (added)
-
react/build/469.ab1a005b0547a0ca0f2b.js (added)
-
react/build/725.0c3dc29fc602c94dd974.js (added)
-
react/build/79.60f8a3c25a3089f47e58.js (added)
-
react/build/809.c849f787f31f82f6d37b.js (added)
-
react/build/843.f6b4fb618126e6186962.js (added)
-
react/build/939.eff1e994e971b57915bc.js (added)
-
react/build/index.de95e7d8a76df3fe461b.asset.php (added)
-
react/build/index.de95e7d8a76df3fe461b.js (added)
-
readme.txt (modified) (1 diff)
-
simplybook.php (modified) (1 diff)
-
vendor/autoload.php (modified) (1 diff)
-
vendor/autoload_packages.php (modified) (1 diff)
-
vendor/composer/autoload_classmap.php (modified) (4 diffs)
-
vendor/composer/autoload_real.php (modified) (2 diffs)
-
vendor/composer/autoload_static.php (modified) (6 diffs)
-
vendor/composer/installed.php (modified) (2 diffs)
-
vendor/composer/jetpack_autoload_classmap.php (modified) (1 diff)
-
vendor/composer/jetpack_autoload_filemap.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-autoloader-handler.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-autoloader-locator.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-autoloader.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-container.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-hook-manager.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-latest-autoloader-guard.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-manifest-reader.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-path-processor.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-php-autoloader.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-plugin-locator.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-plugins-handler.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-shutdown-handler.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-version-loader.php (modified) (1 diff)
-
vendor/jetpack-autoloader/class-version-selector.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
simplybook/trunk/app/Controllers/BlockController.php
r3384996 r3399722 17 17 } 18 18 19 public function register() 19 public function register(): void 20 20 { 21 21 if (!function_exists('register_block_type')) { … … 93 93 * enqueuing assets. This prevents issues in auto-installation situations. 94 94 */ 95 public function enqueueGutenbergBlockEditorAssets() 95 public function enqueueGutenbergBlockEditorAssets(): void 96 96 { 97 97 if ( … … 148 148 * @since 3.1.1 No longer filter out 'any', as this is a valid value for the 149 149 * feature: "Any Employee selector" (/v2/management/#plugins/any_unit/) 150 * 151 * @since 3.2.3 Added do_shortcode for FSE compatibility. FSE requires 152 * an explicit do_shortcode() call to render shortcode content. 153 * In other contexts, this call isn’t necessary, but it’s harmless. Once a 154 * shortcode is rendered, the resulting content no longer contains a "[", so 155 * subsequent calls simply return the already-rendered output. 150 156 */ 151 157 public function renderGutenbergWidgetBlock(array $attributes = []): string … … 155 161 }); 156 162 157 return '[simplybook_widget' . $this->attributesToString($attributes) . ']'; 163 $shortcode = '[simplybook_widget' . $this->attributesToString($attributes) . ']'; 164 165 // Process the shortcode explicitly for FSE compatibility 166 return do_shortcode($shortcode); 158 167 } 159 168 -
simplybook/trunk/app/Controllers/CapabilityController.php
r3384996 r3399722 15 15 } 16 16 17 public function register() 17 public function register(): void 18 18 { 19 19 add_action('simplybook_activation', [$this, 'handlePluginActivation']); … … 43 43 public function addCapabilityToNewSubsite(\WP_Site $newSite, array $args): void 44 44 { 45 switch_to_blog( $newSite->blog_id);45 switch_to_blog((int) $newSite->blog_id); 46 46 $this->service->addSiteCapability('simplybook_manage', false); 47 47 restore_current_blog(); -
simplybook/trunk/app/Controllers/DashboardController.php
r3384996 r3399722 27 27 } 28 28 29 public function register() 29 public function register(): void 30 30 { 31 31 if ($this->userCanManage() === false) { … … 85 85 $menuPosition = apply_filters('simplybook_menu_position', 59); 86 86 87 $menuCounterHtml = ''; 88 $menuCounter = $this->getMenuCount(); 89 if ($menuCounter > 0) { 90 $menuCounterHtml = "<span class='menu-counter' style='position: absolute; top: 2px; z-index: 0; right: 4px;'>{$menuCounter}</span>"; 91 } 92 87 93 $pageHookSuffix = add_menu_page( 88 94 esc_html__('SimplyBook.me', 'simplybook'), 89 esc_html__('SimplyBook.me', 'simplybook') ,95 esc_html__('SimplyBook.me', 'simplybook') . $menuCounterHtml, 90 96 'simplybook_manage', 91 97 'simplybook-integration', … … 110 116 * Enqueue the Tailwind CSS for the dashboard in the header 111 117 */ 112 public function enqueueDashboardStyles() 118 public function enqueueDashboardStyles(): void 113 119 { 114 120 $chunkTranslation = $this->getReactChunkTranslations(); … … 282 288 $this->app->client->reset_registration(); 283 289 } 290 291 /** 292 * Safe way to read the menu count from the options table. Returns 0 if 293 * the Task Management feature is not available in the current context. 294 */ 295 private function getMenuCount(): int 296 { 297 if (class_exists('\SimplyBook\Features\TaskManagement\Tasks\AbstractTask') === false) { 298 return 0; 299 } 300 301 return get_option(\SimplyBook\Features\TaskManagement\Tasks\AbstractTask::MENU_BUBBLE_OPTION_KEY, 0); 302 } 284 303 } -
simplybook/trunk/app/Controllers/DesignSettingsController.php
r3384996 r3399722 16 16 } 17 17 18 public function register() 18 public function register(): void 19 19 { 20 20 add_action('simplybook_plugin_version_upgrade', [$this, 'handlePluginUpgrade'], 10, 2); -
simplybook/trunk/app/Controllers/OnboardingNoticeController.php
r3384996 r3399722 173 173 /** 174 174 * Check if the timestamp is after the given amount of days ago. 175 * @param string|float|int $timestamp 175 176 */ 176 177 private function timestampIsAfter($timestamp, int $daysAgo = 7): bool -
simplybook/trunk/app/Controllers/ReviewController.php
r3384996 r3399722 162 162 /** 163 163 * Check if the timestamp is more than 30 days ago. 164 * @param float|int|string $timestamp 164 165 */ 165 166 private function timestampIsThirtyDaysAgo($timestamp): bool -
simplybook/trunk/app/Controllers/ScheduleController.php
r3384996 r3399722 7 7 class ScheduleController implements ControllerInterface 8 8 { 9 public function register() 9 public function register(): void 10 10 { 11 11 add_filter('cron_schedules', [$this, 'registerSimplyBookSchedules']); -
simplybook/trunk/app/Controllers/ServicesController.php
r3384996 r3399722 21 21 } 22 22 23 public function register() 23 public function register(): void 24 24 { 25 25 add_action('simplybook_after_company_registered', [$this, 'setInitialServiceName']); -
simplybook/trunk/app/Controllers/SettingsController.php
r3384996 r3399722 11 11 use LegacySave; 12 12 13 public function register() 13 public function register(): void 14 14 { 15 15 add_action('simplybook_activation', [$this, 'handlePluginActivation']); -
simplybook/trunk/app/Controllers/WidgetController.php
r3384996 r3399722 24 24 } 25 25 26 public function register() 26 public function register(): void 27 27 { 28 28 add_shortcode('simplybook_widget', [$this, 'renderCalendarWidget']); -
simplybook/trunk/app/Controllers/WidgetTrackingController.php
r3384996 r3399722 27 27 public function register(): void 28 28 { 29 add_action('save_post', [$this, 'handlePostSave'], 10, 3);29 add_action('save_post', [$this, 'handlePostSave'], 10, 2); 30 30 add_action('delete_post', [$this, 'handlePostDelete']); 31 31 add_action('trashed_post', [$this, 'handlePostTrashed']); … … 37 37 public function handlePostSave(int $postId, \WP_Post $post): void 38 38 { 39 40 39 if ($this->shouldProcessSavedPost($postId, $post) !== true) { 41 40 return; -
simplybook/trunk/app/Features/Notifications/Notices/AbstractNotice.php
r3384996 r3399722 58 58 59 59 /** 60 * Use this method to set the notice as active based on a server-side 61 * condition. By default, a notice can activate based on a client-side 62 * condition. 60 * @inheritDoc 63 61 */ 64 62 public function setActive(bool $state = false): void -
simplybook/trunk/app/Features/Notifications/Notices/AddMandatoryProviderNotice.php
r3384996 r3399722 12 12 public function getTitle(): string 13 13 { 14 return esc_html__('No Providers configured', 'simplybook');14 return __('No Providers configured', 'simplybook'); 15 15 } 16 16 … … 20 20 public function getText(): string 21 21 { 22 return esc_html__('Please configure at least one Service Provider', 'simplybook');22 return __('Please configure at least one Service Provider', 'simplybook'); 23 23 } 24 24 … … 45 45 { 46 46 return [ 47 'text' => esc_html__('Add Service Provider', 'simplybook'),47 'text' => __('Add Service Provider', 'simplybook'), 48 48 'login_link' => '/v2/management/#providers/edit/details/add', 49 49 ]; -
simplybook/trunk/app/Features/Notifications/Notices/AddMandatoryServiceNotice.php
r3384996 r3399722 12 12 public function getTitle(): string 13 13 { 14 return esc_html__('No Services configured', 'simplybook');14 return __('No Services configured', 'simplybook'); 15 15 } 16 16 … … 20 20 public function getText(): string 21 21 { 22 return esc_html__('Please configure at least one Service', 'simplybook');22 return __('Please configure at least one Service', 'simplybook'); 23 23 } 24 24 … … 45 45 { 46 46 return [ 47 'text' => esc_html__('Add Service', 'simplybook'),47 'text' => __('Add Service', 'simplybook'), 48 48 'login_link' => '/v2/management/#services/edit/details/add', 49 49 ]; -
simplybook/trunk/app/Features/Notifications/Notices/FailedAuthenticationNotice.php
r3384996 r3399722 21 21 public function getTitle(): string 22 22 { 23 return esc_html__('Connection lost', 'simplybook');23 return __('Connection lost', 'simplybook'); 24 24 } 25 25 … … 29 29 public function getText(): string 30 30 { 31 return esc_html__(32 'We’ve lost connection to your SimplyBook.me account. Please log out and sign in again to reconnect.',31 return __( 32 "We've lost connection to your SimplyBook.me account. Please log out and sign in again to reconnect.", 33 33 'simplybook' 34 34 ); -
simplybook/trunk/app/Features/Notifications/Notices/MaxedOutProvidersNotice.php
r3384996 r3399722 12 12 public function getTitle(): string 13 13 { 14 return esc_html__('Maximum number of Providers reached', 'simplybook');14 return __('Maximum number of Providers reached', 'simplybook'); 15 15 } 16 16 … … 20 20 public function getText(): string 21 21 { 22 return esc_html__('Please upgrade your plan to configure more Service Providers, or delete existing Providers if you want to add more.', 'simplybook');22 return __('Please upgrade your plan to configure more Service Providers, or delete existing Providers if you want to add more.', 'simplybook'); 23 23 } 24 24 … … 45 45 { 46 46 return [ 47 'text' => esc_html__('Upgrade now', 'simplybook'),47 'text' => __('Upgrade now', 'simplybook'), 48 48 'login_link' => '/v2/r/payment-widget', 49 49 ]; -
simplybook/trunk/app/Features/Notifications/Notices/MaxedOutServicesNotice.php
r3384996 r3399722 12 12 public function getTitle(): string 13 13 { 14 return esc_html__('Maximum number of Services reached', 'simplybook');14 return __('Maximum number of Services reached', 'simplybook'); 15 15 } 16 16 … … 20 20 public function getText(): string 21 21 { 22 return esc_html__('Please upgrade your plan to configure more Services, or delete existing Services if you want to add more.', 'simplybook');22 return __('Please upgrade your plan to configure more Services, or delete existing Services if you want to add more.', 'simplybook'); 23 23 } 24 24 … … 45 45 { 46 46 return [ 47 'text' => esc_html__('Upgrade now', 'simplybook'),47 'text' => __('Upgrade now', 'simplybook'), 48 48 'login_link' => '/v2/r/payment-widget', 49 49 ]; -
simplybook/trunk/app/Features/Notifications/Notices/PublishWidgetNotice.php
r3384996 r3399722 35 35 public function getTitle(): string 36 36 { 37 return esc_html__('No booking widget detected!', 'simplybook');37 return __('No booking widget detected!', 'simplybook'); 38 38 } 39 39 … … 43 43 public function getText(): string 44 44 { 45 return esc_html__('It seems that you haven’t published the booking widget on the front-end of your site. Please use the shortcode or Gutenberg Widget to create your booking page to accept bookings!', 'simplybook');45 return __("It seems that you haven't published the booking widget on the front-end of your site. Please use the shortcode or Gutenberg Widget to create your booking page to accept bookings!", 'simplybook'); 46 46 } 47 47 -
simplybook/trunk/app/Features/Notifications/NotificationsController.php
r3384996 r3399722 22 22 } 23 23 24 public function register() 24 public function register(): void 25 25 { 26 26 $this->endpoints->register(); … … 35 35 * to the database. 36 36 * 37 * @return NoticeInterface[]38 37 * @internal New Notices should be added here. Upgrade the Notice version if 39 38 * the Notice should be updated. If a Notice should be removed, remove the 40 39 * Notice from this list. 40 * 41 * @return array<int,NoticeInterface> 42 * @throws \LogicException 41 43 */ 42 44 private function getNoticeObjects(): array 43 45 { 44 // Add new notices here 45 $pluginNotices = [ 46 return [ 46 47 new Notices\AddMandatoryProviderNotice(), 47 48 new Notices\MaxedOutProvidersNotice(), … … 51 52 new Notices\PublishWidgetNotice(), 52 53 ]; 53 54 return array_filter($pluginNotices, function ($notice) {55 return $notice instanceof NoticeInterface;56 });57 54 } 58 55 -
simplybook/trunk/app/Features/Notifications/NotificationsEndpoints.php
r3384996 r3399722 18 18 } 19 19 20 public function register() 20 public function register(): void 21 21 { 22 22 add_filter('simplybook_rest_routes', [$this, 'addNotificationRoutes']); -
simplybook/trunk/app/Features/Onboarding/OnboardingController.php
r3384996 r3399722 29 29 } 30 30 31 public function register() 31 public function register(): void 32 32 { 33 33 // Check if the user has admin access permissions … … 138 138 return $this->service->sendHttpResponse([ 139 139 'invalid_fields' => $companyBuilder->getInvalidFields(), 140 ], false, esc_html__('Please fill in all fields.', 'simplybook'), 400);140 ], false, __('Please fill in all fields.', 'simplybook'), 400); 141 141 } 142 142 … … 161 161 162 162 if ($storage->isEmpty('recaptchaToken')) { 163 // wp_kses_post to allow apostrophe in the message 164 $error = wp_kses_post(__('Please verify you\'re not a robot.', 'simplybook')); 163 $error = __("Please verify you're not a robot.", 'simplybook'); 165 164 } 166 165 167 166 if ($storage->isEmpty('confirmation-code')) { 168 $error = esc_html__('Please enter the confirmation code.', 'simplybook');167 $error = __('Please enter the confirmation code.', 'simplybook'); 169 168 } 170 169 171 170 if (!empty($error)) { 172 return $this->service->sendHttpResponse([], false, $error );171 return $this->service->sendHttpResponse([], false, $error, 400); 173 172 } 174 173 175 174 try { 176 175 $response = $this->app->client->confirm_email( 177 $storage->get Int('confirmation-code'),176 $storage->getString('confirmation-code'), 178 177 $storage->getString('recaptchaToken') 179 178 ); … … 182 181 } 183 182 184 $this->service->setCompletedStep(3); 183 // Only mark step as completed if the API call was successful 184 if ($response->success) { 185 $this->service->setCompletedStep(3); 186 } 187 185 188 return $this->service->sendHttpResponse([], $response->success, $response->message, ($response->success ? 200 : 400)); 186 189 } … … 203 206 do_action('simplybook_save_onboarding_widget_style', $storage); 204 207 } catch (\Exception $e) { 205 $message = esc_html__('Something went wrong while saving the widget style settings. Please try again.', 'simplybook');208 $message = __('Something went wrong while saving the widget style settings. Please try again.', 'simplybook'); 206 209 return $this->service->sendHttpResponse([ 207 210 'message' => $e->getMessage(), … … 209 212 } 210 213 211 $message = esc_html__('Successfully saved widget style settings', 'simplybook');214 $message = __('Successfully saved widget style settings', 'simplybook'); 212 215 return $this->service->sendHttpResponse([], true, $message); 213 216 } … … 228 231 * Generate default shortcode pages 229 232 */ 230 public function generateDefaultPages( $request,$ajaxData = []): \WP_REST_Response233 public function generateDefaultPages(\WP_REST_Request $request, array $ajaxData = []): \WP_REST_Response 231 234 { 232 235 $storage = $this->service->retrieveHttpStorage($request, $ajaxData); … … 234 237 $calendarPageIsAvailable = $this->service->isPageTitleAvailableForURL($storage->getString('calendarPageUrl')); 235 238 if (!$calendarPageIsAvailable) { 236 $message = esc_html__('Calendar page title should be available if you choose to generate this page.', 'simplybook');239 $message = __('Calendar page title should be available if you choose to generate this page.', 'simplybook'); 237 240 return $this->service->sendHttpResponse([], false, $message, 503); 238 241 } … … 277 280 278 281 if ($storage->isOneEmpty(['company_domain', 'company_login', 'user_login', 'user_password'])) { 279 return $this->service->sendHttpResponse([], false, esc_html__('Please fill in all fields.', 'simplybook'));282 return $this->service->sendHttpResponse([], false, __('Please fill in all fields.', 'simplybook')); 280 283 } 281 284 … … 294 297 return $this->service->sendHttpResponse([ 295 298 'message' => $e->getMessage(), 296 ], false, esc_html__('Unknown error occurred, please verify your credentials.', 'simplybook'), 500);299 ], false, __('Unknown error occurred, please verify your credentials.', 'simplybook'), 500); 297 300 } 298 301 … … 301 304 302 305 return new \WP_REST_Response([ 303 'message' => esc_html__('Login successful.', 'simplybook'),306 'message' => __('Login successful.', 'simplybook'), 304 307 ], 200); 305 308 } … … 317 320 318 321 if ($storage->isOneEmpty(['company_login', 'domain', 'auth_session_id', 'two_fa_type', 'two_fa_code'])) { 319 return $this->service->sendHttpResponse([], false, esc_html__('Please fill in all fields.', 'simplybook'));322 return $this->service->sendHttpResponse([], false, __('Please fill in all fields.', 'simplybook')); 320 323 } 321 324 … … 334 337 return $this->service->sendHttpResponse([ 335 338 'message' => $e->getMessage(), 336 ], false, esc_html__('Unknown 2FA error occurred, please verify your credentials.', 'simplybook')); // Default code 200 because React side still used request() here339 ], false, __('Unknown 2FA error occurred, please verify your credentials.', 'simplybook')); // Default code 200 because React side still used request() here 337 340 } 338 341 339 342 $this->finishLoggingInUser($response, $companyDomain, $companyLogin); 340 343 341 return $this->service->sendHttpResponse([], true, esc_html__('Successfully authenticated user', 'simplybook')); // Default code 200 because React side still used request() here344 return $this->service->sendHttpResponse([], true, __('Successfully authenticated user', 'simplybook')); // Default code 200 because React side still used request() here 342 345 } 343 346 … … 377 380 * line 352. 378 381 */ 379 protected function saveLoginCompanyData(string $userLogin, string $password) 382 protected function saveLoginCompanyData(string $userLogin, string $password): void 380 383 { 381 384 $companyBuilder = new CompanyBuilder(); … … 404 407 } 405 408 406 return $this->service->sendHttpResponse([], true, esc_html__('Successfully requested SMS code', 'simplybook')); // Default code 200 because React side still used request() here409 return $this->service->sendHttpResponse([], true, __('Successfully requested SMS code', 'simplybook')); // Default code 200 because React side still used request() here 407 410 } 408 411 … … 416 419 { 417 420 $code = 200; 418 $message = esc_html__('Successfully finished onboarding!', 'simplybook');421 $message = __('Successfully finished onboarding!', 'simplybook'); 419 422 420 423 $success = $this->service->setOnboardingCompleted(); 421 424 if (!$success) { 422 $message = esc_html__('An error occurred while finishing the onboarding process', 'simplybook');425 $message = __('An error occurred while finishing the onboarding process', 'simplybook'); 423 426 $code = 400; 424 427 } … … 434 437 { 435 438 $success = $this->service->delete_all_options(); 436 $message = esc_html__('Successfully removed all previous data.', 'simplybook');439 $message = __('Successfully removed all previous data.', 'simplybook'); 437 440 438 441 if (!$success) { 439 $message = esc_html__('An error occurred while trying to remove previous data.', 'simplybook');442 $message = __('An error occurred while trying to remove previous data.', 'simplybook'); 440 443 } 441 444 -
simplybook/trunk/app/Features/Onboarding/OnboardingService.php
r3384996 r3399722 55 55 * ApiResponseDTO from the successful {@see ApiClient::register_company()} 56 56 */ 57 public function finishCompanyRegistration(array $data) 57 public function finishCompanyRegistration(array $data): void 58 58 { 59 59 $responseDataStorage = new Storage($data); … … 78 78 79 79 $success = (is_email($submittedEmailAddress) && $adminAgreesToTerms); 80 $message = ($success ? '' : esc_html__('Please enter a valid email address and accept the terms and conditions', 'simplybook'));80 $message = ($success ? '' : __('Please enter a valid email address and accept the terms and conditions', 'simplybook')); 81 81 82 82 if ($success) { -
simplybook/trunk/app/Features/TaskManagement/TaskManagementController.php
r3384996 r3399722 12 12 private TaskManagementListener $listener; 13 13 14 public function __construct( )14 public function __construct(TaskManagementService $service, TaskManagementEndpoints $endpoints, TaskManagementListener $listener) 15 15 { 16 $this->service = new TaskManagementService( 17 new TaskManagementRepository() 18 ); 19 20 $this->endpoints = new TaskManagementEndpoints($this->service); 21 $this->listener = new TaskManagementListener($this->service); 16 $this->service = $service; 17 $this->endpoints = $endpoints; 18 $this->listener = $listener; 22 19 } 23 20 24 public function register() 21 public function register(): void 25 22 { 26 23 $this->endpoints->register(); … … 39 36 * this list. 40 37 * 41 * @return TaskInterface[] 38 * @return array<int,TaskInterface> 39 * @throws \LogicException 42 40 */ 43 41 private function getTaskObjects(): array 44 42 { 45 // Add new tasks here 46 $pluginTasks = [ 43 return [ 47 44 new Tasks\FailedAuthenticationTask(), 48 45 new Tasks\PublishWidgetTask(), … … 60 57 new Tasks\PostOnSocialMediaTask(), 61 58 new Tasks\GatherClientInfoTask(), 59 new Tasks\BlackFridayTask(), 62 60 ]; 63 64 return array_filter($pluginTasks, function ($task) {65 return $task instanceof TaskInterface;66 });67 61 } 68 62 -
simplybook/trunk/app/Features/TaskManagement/TaskManagementEndpoints.php
r3384996 r3399722 18 18 } 19 19 20 public function register() 20 public function register(): void 21 21 { 22 22 add_filter('simplybook_rest_routes', [$this, 'addTaskRoutes']); … … 52 52 $allTasksAsArray = array_map(function ($task) { 53 53 return $task->toArray(); 54 }, $this->service->getAllTasks( true));54 }, $this->service->getAllTasks()); 55 55 56 56 return $this->sendHttpResponse( -
simplybook/trunk/app/Features/TaskManagement/TaskManagementListener.php
r3384996 r3399722 4 4 5 5 use SimplyBook\Support\Helpers\Event; 6 use SimplyBook\Services\PromotionService; 7 use SimplyBook\Services\SubscriptionDataService; 6 8 7 9 class TaskManagementListener 8 10 { 9 11 private TaskManagementService $service; 10 11 public function __construct(TaskManagementService $service) 12 private PromotionService $promotionService; 13 private SubscriptionDataService $subscriptionDataService; 14 15 public function __construct(TaskManagementService $service, PromotionService $promotionService, SubscriptionDataService $subscriptionDataService) 12 16 { 13 17 $this->service = $service; 18 $this->promotionService = $promotionService; 19 $this->subscriptionDataService = $subscriptionDataService; 14 20 } 15 21 16 22 public function listen(): void 17 23 { 24 add_action('admin_init', [$this, 'handleDateDrivenTasks']); 18 25 add_action('simplybook_event_' . Event::EMPTY_SERVICES, [$this, 'handleEmptyServices']); 19 26 add_action('simplybook_event_' . Event::EMPTY_PROVIDERS, [$this, 'handleEmptyProviders']); … … 122 129 } 123 130 131 if (!empty($subscription)) { 132 $this->handleBlackFridayTask($subscription); 133 } 134 124 135 $this->handleSubscriptionLimits($limits); 125 136 } … … 273 284 ); 274 285 } 286 287 /** 288 * Method will only set the Black Friday task visible and mark it as upgrade 289 * if the current subscription is 'Trial' and the current date is between 290 * the Black Friday start and end date mentioned in the env config. 291 */ 292 private function handleBlackFridayTask(string $subscriptionType): void 293 { 294 $isTrial = (strtolower($subscriptionType) === 'trial'); 295 296 if ($isTrial && $this->promotionService->isBlackFriday()) { 297 $this->service->setTaskBubbleCounter(1); 298 $this->service->markTaskUpgrade( 299 Tasks\BlackFridayTask::IDENTIFIER 300 ); 301 return; 302 } 303 304 $this->service->setTaskBubbleCounter(0); 305 $this->service->hideTask( 306 Tasks\BlackFridayTask::IDENTIFIER 307 ); 308 } 309 310 /** 311 * Method is hooked on 'admin_init' action to check for date driven tasks. 312 * Because these tasks do not depend solely on events but also on the 313 * current date we should check them on every page load. 314 * @internal make sure you cache your conditionals 315 */ 316 public function handleDateDrivenTasks(): void 317 { 318 if ($this->promotionService->isBlackFriday()) { 319 $this->handleBlackFridayTask( 320 (string) $this->subscriptionDataService->search('subscription_name', '') 321 ); 322 } 323 } 275 324 } -
simplybook/trunk/app/Features/TaskManagement/TaskManagementService.php
r3384996 r3399722 141 141 $this->repository->updateTaskStatus($taskId, AbstractTask::STATUS_COMPLETED); 142 142 } 143 144 /** 145 * Set the task to 'upgrade' status. This is used for upsell reasons. For 146 * example with Black Friday promotions. 147 */ 148 public function markTaskUpgrade(string $taskId): void 149 { 150 $this->repository->updateTaskStatus($taskId, AbstractTask::STATUS_UPGRADE); 151 } 152 153 /** 154 * Update the task bubble counter shown in the admin menu 155 */ 156 public function setTaskBubbleCounter(int $count): void 157 { 158 update_option(AbstractTask::MENU_BUBBLE_OPTION_KEY, $count); 159 } 143 160 } -
simplybook/trunk/app/Features/TaskManagement/Tasks/AbstractTask.php
r3384996 r3399722 8 8 { 9 9 public const STATUS_OPEN = 'open'; 10 public const STATUS_UPGRADE = 'upgrade'; 10 11 public const STATUS_URGENT = 'urgent'; 11 12 public const STATUS_DISMISSED = 'dismissed'; … … 21 22 22 23 /** 24 * Option key to store the menu bubble counter for tasks. Can be used to 25 * show the number of urgent tasks in the admin menu. Currently only used 26 * if the Black Friday promotion is active. 27 */ 28 public const MENU_BUBBLE_OPTION_KEY = 'simplybook_task_bubble_counter'; 29 30 /** 23 31 * Override this property to define the version of the task. This version is 24 32 * used to determine if the task should be upgraded during a plugin update. … … 115 123 $knownStatuses = [ 116 124 self::STATUS_OPEN, 125 self::STATUS_UPGRADE, 117 126 self::STATUS_URGENT, 118 127 self::STATUS_DISMISSED, … … 145 154 146 155 /** 156 * Set the task to 'upgrade' status 157 */ 158 public function upgrade(): void 159 { 160 $this->status = self::STATUS_UPGRADE; 161 } 162 163 /** 147 164 * Dismiss the task by setting the status to 'dismissed'. Only allowed if 148 165 * the task is not required. … … 174 191 175 192 /** 176 * Reads if the task is required193 * @inheritDoc 177 194 */ 178 195 public function isRequired(): bool … … 205 222 { 206 223 if ($this->isPremium()) { 207 return esc_html__('Premium', 'simplybook');224 return __('Premium', 'simplybook'); 208 225 } 209 226 210 227 if ($this->isSpecialFeature()) { 211 return esc_html__('Special feature', 'simplybook');228 return __('Special feature', 'simplybook'); 212 229 } 213 230 -
simplybook/trunk/app/Features/TaskManagement/Tasks/AcceptPaymentsTask.php
r3384996 r3399722 22 22 public function getText(): string 23 23 { 24 return esc_html__('Accept payments via SimplyBook.me', 'simplybook');24 return __('Accept payments via SimplyBook.me', 'simplybook'); 25 25 } 26 26 … … 32 32 return [ 33 33 'type' => 'button', 34 'text' => esc_html__('More info', 'simplybook'),34 'text' => __('More info', 'simplybook'), 35 35 'login_link' => 'v2/management/#plugins/paid_events', 36 36 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/AddAllProvidersTask.php
r3384996 r3399722 21 21 public function getText(): string 22 22 { 23 return esc_html__('Have you added all Service Providers?', 'simplybook');23 return __('Have you added all Service Providers?', 'simplybook'); 24 24 } 25 25 … … 31 31 return [ 32 32 'type' => 'button', 33 'text' => esc_html__('Add Providers', 'simplybook'),33 'text' => __('Add Providers', 'simplybook'), 34 34 'login_link' => '/v2/management/#providers', 35 35 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/AddAllServicesTask.php
r3384996 r3399722 21 21 public function getText(): string 22 22 { 23 return esc_html__('Have you added all your Services?', 'simplybook');23 return __('Have you added all your Services?', 'simplybook'); 24 24 } 25 25 … … 31 31 return [ 32 32 'type' => 'button', 33 'text' => esc_html__('Add Services', 'simplybook'),33 'text' => __('Add Services', 'simplybook'), 34 34 'login_link' => '/v2/management/#services', 35 35 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/AddMandatoryProviderTask.php
r3384996 r3399722 27 27 public function getText(): string 28 28 { 29 return esc_html__('Please configure at least one Service Provider', 'simplybook');29 return __('Please configure at least one Service Provider', 'simplybook'); 30 30 } 31 31 … … 37 37 return [ 38 38 'type' => 'button', 39 'text' => esc_html__('Add Provider', 'simplybook'),39 'text' => __('Add Provider', 'simplybook'), 40 40 'link' => 'settings/providers', 41 41 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/AddMandatoryServiceTask.php
r3384996 r3399722 27 27 public function getText(): string 28 28 { 29 return esc_html__('Please configure at least one Service', 'simplybook');29 return __('Please configure at least one Service', 'simplybook'); 30 30 } 31 31 … … 37 37 return [ 38 38 'type' => 'button', 39 'text' => esc_html__('Add Service', 'simplybook'),39 'text' => __('Add Service', 'simplybook'), 40 40 'link' => 'settings/services', 41 41 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/CustomizeDesignTask.php
r3384996 r3399722 17 17 public function getText(): string 18 18 { 19 return esc_html__('Customize your booking widget', 'simplybook');19 return __('Customize your booking widget', 'simplybook'); 20 20 } 21 21 … … 27 27 return [ 28 28 'type' => 'button', 29 'text' => esc_html__('Design settings', 'simplybook'),29 'text' => __('Design settings', 'simplybook'), 30 30 'link' => 'settings/design', 31 31 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/FailedAuthenticationTask.php
r3384996 r3399722 25 25 public function getText(): string 26 26 { 27 return esc_html__('We’ve lost connection to your SimplyBook.me account. Reconnect by logging out via the general settings.', 'simplybook');27 return __("We've lost connection to your SimplyBook.me account. Reconnect by logging out via the general settings.", 'simplybook'); 28 28 } 29 29 … … 35 35 return [ 36 36 'type' => 'button', 37 'text' => esc_html__('General settings', 'simplybook'),37 'text' => __('General settings', 'simplybook'), 38 38 'link' => 'settings/general', 39 39 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/GatherClientInfoTask.php
r3384996 r3399722 22 22 public function getText(): string 23 23 { 24 return esc_html__('Gather information from your clients upon booking', 'simplybook');24 return __('Gather information from your clients upon booking', 'simplybook'); 25 25 } 26 26 … … 32 32 return [ 33 33 'type' => 'button', 34 'text' => esc_html__('More info', 'simplybook'),34 'text' => __('More info', 'simplybook'), 35 35 'login_link' => 'v2/management/#additional-fields', 36 36 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/GoToSimplyBookSystemTask.php
r3384996 r3399722 17 17 public function getText(): string 18 18 { 19 return esc_html__('Discover the full functionality on SimplyBook.me', 'simplybook');19 return __('Discover the full functionality on SimplyBook.me', 'simplybook'); 20 20 } 21 21 … … 27 27 return [ 28 28 'type' => 'button', 29 'text' => esc_html__('SimplyBook.me', 'simplybook'),29 'text' => __('SimplyBook.me', 'simplybook'), 30 30 'login_link' => '/v2/dashboard/new', 31 31 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/InstallAppTask.php
r3384996 r3399722 17 17 public function getText(): string 18 18 { 19 return esc_html__('Install the SimplyBook.me app for iOS or Android', 'simplybook');19 return __('Install the SimplyBook.me app for iOS or Android', 'simplybook'); 20 20 } 21 21 … … 27 27 return [ 28 28 'type' => 'button', 29 'text' => esc_html__('More info', 'simplybook'),29 'text' => __('More info', 'simplybook'), 30 30 'modal' => [ 31 31 'id' => 'install_app_task', -
simplybook/trunk/app/Features/TaskManagement/Tasks/MaxedOutProvidersTask.php
r3384996 r3399722 32 32 public function getText(): string 33 33 { 34 return esc_html__('You have reached the maximum number of Service Providers for your plan', 'simplybook');34 return __('You have reached the maximum number of Service Providers for your plan', 'simplybook'); 35 35 } 36 36 … … 42 42 return [ 43 43 'type' => 'button', 44 'text' => esc_html__('Upgrade', 'simplybook'),44 'text' => __('Upgrade', 'simplybook'), 45 45 'login_link' => 'v2/r/payment-widget', 46 46 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/MaximumBookingsTask.php
r3384996 r3399722 33 33 public function getText(): string 34 34 { 35 return esc_html__('You have reached the maximum number of bookings for your plan', 'simplybook');35 return __('You have reached the maximum number of bookings for your plan', 'simplybook'); 36 36 } 37 37 … … 43 43 return [ 44 44 'type' => 'button', 45 'text' => esc_html__('Upgrade', 'simplybook'),45 'text' => __('Upgrade', 'simplybook'), 46 46 'login_link' => 'v2/r/payment-widget#/', 47 47 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/PostOnSocialMediaTask.php
r3384996 r3399722 22 22 public function getText(): string 23 23 { 24 return esc_html__('Post your social media content and create ads', 'simplybook');24 return __('Post your social media content and create ads', 'simplybook'); 25 25 } 26 26 … … 32 32 return [ 33 33 'type' => 'button', 34 'text' => esc_html__('More info', 'simplybook'),34 'text' => __('More info', 'simplybook'), 35 35 'login_link' => 'v2/metric', 36 36 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/PublishWidgetTask.php
r3384996 r3399722 43 43 public function getText(): string 44 44 { 45 return esc_html__('Publish the booking widget on the front-end of your site.', 'simplybook');45 return __('Publish the booking widget on the front-end of your site.', 'simplybook'); 46 46 } 47 47 … … 53 53 return [ 54 54 'type' => 'button', 55 'text' => esc_html__('Show shortcodes', 'simplybook'),55 'text' => __('Show shortcodes', 'simplybook'), 56 56 'link' => 'settings/general', 57 57 ]; -
simplybook/trunk/app/Features/TaskManagement/Tasks/TrialExpiredTask.php
r3384996 r3399722 33 33 public function getText(): string 34 34 { 35 return esc_html__('Your Trial period has expired! Please consider all premium features!', 'simplybook');35 return __('Your Trial period has expired! Please consider all premium features!', 'simplybook'); 36 36 } 37 37 … … 43 43 return [ 44 44 'type' => 'button', 45 'text' => esc_html__('Upgrade', 'simplybook'),45 'text' => __('Upgrade', 'simplybook'), 46 46 'login_link' => 'v2/r/payment-widget#/', 47 47 ]; -
simplybook/trunk/app/Http/ApiClient.php
r3384996 r3399722 33 33 34 34 protected App $app; 35 protected JsonRpcClient $jsonRpcClient;36 35 37 36 /** … … 69 68 * @throws \LogicException For developers. 70 69 */ 71 public function __construct(App $app , JsonRpcClient $client)70 public function __construct(App $app) 72 71 { 73 72 $this->app = $app; … … 78 77 } 79 78 80 $this->jsonRpcClient = $client;81 79 $this->applicationKey = ($environment['app_key'] ?? ''); 82 80 … … 149 147 150 148 /** 151 * Check if we have a company_id, which shows we have a registered company 149 * Check if an admin token exists, which indicates the company is registered, 150 * and we can make authenticated API calls. 151 * 152 * Cache duration: 153 * - When onboarding completed: 24 hours (stable state) 154 * - During onboarding: 10 minutes (more frequent checks) 155 * - When no token: 1 minute 152 156 */ 153 157 public function company_registration_complete(): bool 154 158 { 155 159 $cacheName = 'company_registration_complete'; 156 if ($cache = wp_cache_get($cacheName, 'simplybook')) { 160 $cache = wp_cache_get($cacheName, 'simplybook', false, $found); 161 if ($found) { 157 162 return $cache; 158 163 } 159 164 160 // check if the callback has been completed, resulting in a company/admin token.165 // Check if admin token exists 161 166 if ( !$this->getToken('admin') ) { 162 167 $companyRegistrationStartTime = get_option('simplybook_company_registration_start_time', 0); … … 170 175 } 171 176 172 wp_cache_set($cacheName, $cacheName, 'simplybook', MINUTE_IN_SECONDS);177 wp_cache_set($cacheName, false, 'simplybook', MINUTE_IN_SECONDS); 173 178 return false; 174 179 } 175 180 176 wp_cache_set($cacheName, $cacheName, 'simplybook', (MINUTE_IN_SECONDS * 10)); 181 // If the token exists, and the onboarding is completed, we know 182 // the company registration is complete, and we can cache for a longer 183 // time. 184 $isOnboardingCompleted = (get_option('simplybook_onboarding_completed', false) !== false); 185 $cacheTime = MINUTE_IN_SECONDS * 10; 186 if ($isOnboardingCompleted) { 187 $cacheTime = DAY_IN_SECONDS; 188 } 189 190 wp_cache_set($cacheName, true, 'simplybook', $cacheTime); 177 191 return true; 178 192 } … … 321 335 /** 322 336 * Refresh the token 323 * 324 * @return void 325 */ 326 public function refresh_token($type = 'public'): void { 337 */ 338 public function refresh_token(string $type = 'public'): void 339 { 327 340 if ($this->isRefreshLocked($type)) { 328 341 return; … … 441 454 * error on when decrypting an existing token fails. 442 455 */ 443 private function automaticAuthenticationFallback(string $type) 456 private function automaticAuthenticationFallback(string $type): void 444 457 { 445 458 // Company login can be empty for fresh accounts … … 450 463 451 464 $validateBasedOnDomainConfig = did_action('init'); 452 $domain = $this->get_domain( $validateBasedOnDomainConfig);465 $domain = $this->get_domain((bool) $validateBasedOnDomainConfig); 453 466 454 467 $companyData = $this->get_company(); … … 583 596 } 584 597 585 public function reset_registration(){ 598 public function reset_registration(): void 599 { 586 600 $this->delete_company_login(); 587 601 $this->clearTokens(); … … 598 612 if ($this->adminAccessAllowed() === false) { 599 613 throw new ApiException( 600 esc_html__('You are not authorized to do this.', 'simplybook')614 __('You are not authorized to do this.', 'simplybook') 601 615 ); 602 616 } … … 604 618 if (get_transient('simply_book_attempt_count') > 3) { 605 619 throw new ApiException( 606 esc_html__('Too many attempts to register company, please try again in a minute.', 'simplybook')620 __('Too many attempts to register company, please try again in a minute.', 'simplybook') 607 621 ); 608 622 } … … 618 632 if ($sanitizedCompany->isValid() === false) { 619 633 throw (new ApiException( 620 esc_html__('Please fill in all company data.', 'simplybook')634 __('Please fill in all company data.', 'simplybook') 621 635 ))->setData([ 622 636 'invalid_fields' => $sanitizedCompany->getInvalidFields(), … … 663 677 if (is_wp_error($request)) { 664 678 throw (new ApiException( 665 esc_html__('Something went wrong while registering your company. Please try again.', 'simplybook'))679 __('Something went wrong while registering your company. Please try again.', 'simplybook')) 666 680 )->setData([ 667 681 'error' => $request->get_error_message(), … … 675 689 676 690 if ($companySuccessfullyRegistered) { 677 return new ApiResponseDTO(true, esc_html__('Company successfully registered.', 'simplybook'), 200, [691 return new ApiResponseDTO(true, __('Company successfully registered.', 'simplybook'), 200, [ 678 692 'recaptcha_site_key' => $response->recaptcha_site_key, 679 693 'recaptcha_version' => $response->recaptcha_version, … … 708 722 ) { 709 723 throw (new ApiException( 710 esc_html__('The company name is not allowed. Please change the company name.', 'simplybook')724 __('The company name is not allowed. Please change the company name.', 'simplybook') 711 725 ))->setData([ 712 726 'name' => $response->data->name, … … 716 730 717 731 throw (new ApiException( 718 esc_html__('Unknown error encountered while registering your company. Please try again.', 'simplybook')732 __('Unknown error encountered while registering your company. Please try again.', 'simplybook') 719 733 ))->setData([ 720 734 'message' => $response->message, 721 735 'data' => is_object($response->data) ? get_object_vars($response->data) : $response->data, 722 736 ]); 723 }724 725 /**726 * Get user full name to set as the default provider727 *728 * @return string729 */730 private function get_user_full_name(): string {731 $user = wp_get_current_user();732 $first_name = $user->first_name;733 $last_name = $user->last_name;734 if ( !empty($first_name) && !empty($last_name) ) {735 return $first_name . ' ' . $last_name;736 }737 738 if ( !empty($user->user_nicename)) {739 return $user->user_nicename;740 }741 return $user->display_name;742 737 } 743 738 … … 802 797 * @throws ApiException 803 798 */ 804 public function confirm_email( int$email_code, string $recaptcha_token ): ApiResponseDTO799 public function confirm_email( string $email_code, string $recaptcha_token ): ApiResponseDTO 805 800 { 806 801 if ($this->adminAccessAllowed() === false) { 807 802 throw new ApiException( 808 esc_html__('You are not authorized to do this.', 'simplybook')803 __('You are not authorized to do this.', 'simplybook') 809 804 ); 810 805 } … … 814 809 if (get_option("simplybook_company_registration_start_time") === false) { 815 810 throw new ApiException( 816 esc_html__('Something went wrong, are you sure you started the company registration?', 'simplybook')811 __('Something went wrong, are you sure you started the company registration?', 'simplybook') 817 812 ); 818 813 } … … 833 828 if (is_wp_error($request)) { 834 829 throw (new ApiException( 835 esc_html__('Something went wrong while confirming your email. Please try again.', 'simplybook'))830 __('Something went wrong while confirming your email. Please try again.', 'simplybook')) 836 831 )->setData([ 837 832 'error' => $request->get_error_message(), … … 841 836 $response = json_decode(wp_remote_retrieve_body($request)); 842 837 if (isset($response->success)) { 843 return new ApiResponseDTO(true, esc_html__('Email successfully confirmed.', 'simplybook'));838 return new ApiResponseDTO(true, __('Email successfully confirmed.', 'simplybook')); 844 839 } 845 840 846 841 $codeIsValid = true; 847 $errorMessage = esc_html__('Unknown error encountered while confirming your email. Please try again.', 'simplybook');842 $errorMessage = __('Unknown error encountered while confirming your email. Please try again.', 'simplybook'); 848 843 if (isset($response->message) && str_contains($response->message, 'not valid')) { 849 $errorMessage = esc_html__('This confirmation code is not valid.', 'simplybook');844 $errorMessage = __('This confirmation code is not valid.', 'simplybook'); 850 845 $codeIsValid = false; 851 846 } … … 1016 1011 } 1017 1012 1013 if (is_wp_error( $response_body ) ) { 1014 $message = "WP_Error during api call for path: $path. Error: " . $response_body->get_error_message(); 1015 $this->log($message); 1016 1017 update_option('simplybook_api_status', [ 1018 'status' => 'error', 1019 'time' => time(), 1020 'error' => esc_sql($message), 1021 ]); 1022 1023 return []; 1024 } 1025 1018 1026 $response_code = wp_remote_retrieve_response_code( $response_body ); 1019 if ( !is_wp_error( $response_body)) { 1020 $response = json_decode( wp_remote_retrieve_body( $response_body ), true ); 1021 } 1027 $response = json_decode( wp_remote_retrieve_body( $response_body ), true ); 1022 1028 1023 1029 if ( $response_code === 200 ) { … … 1032 1038 update_option('simplybook_persistent_cache', $cache, false); 1033 1039 return $response; 1034 } else { 1035 if ( isset($response['message'])) { 1036 $message = $response['message']; 1037 } else if (isset($response->message)){ 1038 $message = $response->message; 1039 } else { 1040 $message = ''; 1041 } 1042 if ( $attempt===1 && str_contains( $message, 'Token Expired')) { 1043 //invalid token, refresh. 1044 $this->refresh_token($token_type); 1045 $this->api_call( $path, $data, $type, $attempt + 1 ); 1046 } 1047 $this->log("Error during $path_type retrieval: ".$message); 1048 1049 /* phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r */ 1050 $msg = "response code: " . $response_code . ", response body: ".print_r($response_body,true); 1051 1052 update_option('simplybook_api_status', array( 1053 'status' => 'error', 1054 'error' => esc_sql($msg), 1055 'time' => time(), 1056 ) ); 1057 $this->_log($msg); 1058 } 1040 } 1041 1042 $message = ''; 1043 if ( isset($response['message'])) { 1044 $message = $response['message']; 1045 } elseif (isset($response->message)){ 1046 $message = $response->message; 1047 } 1048 1049 if ( $attempt === 1 && str_contains( $message, 'Token Expired')) { 1050 //invalid token, refresh. 1051 $this->refresh_token($token_type); 1052 return $this->api_call( $path, $data, $type, $attempt + 1 ); 1053 } 1054 1055 $this->log("Error during $path_type retrieval: ".$message); 1056 1057 /* phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r */ 1058 $msg = "response code: " . $response_code . ", response body: ".print_r($response_body,true); 1059 1060 $this->_log($msg); 1061 update_option('simplybook_api_status', array( 1062 'status' => 'error', 1063 'error' => esc_sql($msg), 1064 'time' => time(), 1065 ) ); 1066 1059 1067 return []; 1060 1068 } 1061 1069 1062 1070 /** 1063 * 1064 * 1065 * Below old api functions 1066 */ 1067 1068 1069 public function checkApiConnection(){ 1071 * Check if we have a valid API Connection 1072 */ 1073 public function checkApiConnection(): bool 1074 { 1070 1075 $response = wp_remote_get($this->endpoint('admin')); 1071 1076 1072 // if reponse 401 and valid json - api is working1073 if (wp_remote_retrieve_response_code($response) == 401){1077 // if response 401 and valid json - api is working 1078 if (wp_remote_retrieve_response_code($response) == 401) { 1074 1079 $result = wp_remote_retrieve_body($response); 1075 1080 $result = json_decode($result, true); 1076 if ($result && isset($result['code']) && $result['code'] == 401){1081 if ($result && isset($result['code']) && $result['code'] == 401) { 1077 1082 return true; 1078 1083 } 1079 1084 } 1085 1080 1086 return false; 1081 1087 } … … 1084 1090 * @todo - maybe this can be an Entity in the future? 1085 1091 */ 1086 public function getCategories(bool $onlyValues = false) 1092 public function getCategories(bool $onlyValues = false): array 1087 1093 { 1088 1094 $cacheKey = 'sb_plugin_categories' . $this->_commonCacheKey; … … 1100 1106 * @todo - maybe this can be an Entity in the future? 1101 1107 */ 1102 public function getLocations(bool $onlyValues = false) 1108 public function getLocations(bool $onlyValues = false): array 1103 1109 { 1104 1110 $cacheKey = 'sb_plugin_locations' . $this->_commonCacheKey; … … 1116 1122 * @todo - maybe this can be an Entity in the future? 1117 1123 */ 1118 public function getSpecialFeatureList() 1124 public function getSpecialFeatureList(): array 1119 1125 { 1120 1126 $cacheKey = 'sb_plugin_plugins' . $this->_commonCacheKey; … … 1159 1165 } 1160 1166 1161 protected function _log($error) 1167 /** 1168 * @param mixed $error 1169 */ 1170 protected function _log($error): void 1162 1171 { 1163 1172 // Return if WP_DEBUG is not enabled … … 1186 1195 /* phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log */ 1187 1196 error_log($error); 1188 }1189 1190 /**1191 * Check if we have an error status stored1192 * @return bool1193 */1194 private function api_is_ok(): bool1195 {1196 $api_status = get_option('simplybook_api_status');1197 if ( !isset($api_status['status']) ) {1198 //nothing saved yet, assume ok.1199 return true;1200 }1201 if ( $api_status['status'] === 'error' && $api_status['time'] > time() - HOUR_IN_SECONDS ) {1202 return false;1203 }1204 1205 //success, or last fail was an hour ago, try again.1206 return true;1207 1197 } 1208 1198 … … 1242 1232 if (!is_array($responseBody) || !isset($responseBody['token'])) { 1243 1233 throw (new RestDataException( 1244 esc_html__('Login failed! Please try again later.', 'simplybook')1234 __('Login failed! Please try again later.', 'simplybook') 1245 1235 ))->setResponseCode(500)->setData([ 1246 1236 'response_code' => $responseCode, 1247 'response_message' => esc_html__('Invalid response from SimplyBook.me', 'simplybook'),1237 'response_message' => __('Invalid response from SimplyBook.me', 'simplybook'), 1248 1238 ]); 1249 1239 } … … 1298 1288 if (!is_array($responseBody) || !isset($responseBody['token'])) { 1299 1289 throw (new RestDataException( 1300 esc_html__('Two factor authentication failed! Please try again later.', 'simplybook')1290 __('Two factor authentication failed! Please try again later.', 'simplybook') 1301 1291 ))->setData([ 1302 1292 'response_code' => $responseCode, 1303 'response_message' => esc_html__('Invalid 2FA response from SimplyBook.me', 'simplybook'),1293 'response_message' => __('Invalid 2FA response from SimplyBook.me', 'simplybook'), 1304 1294 ]); 1305 1295 } … … 1321 1311 * @throws RestDataException 1322 1312 */ 1323 public function throwSpecificLoginErrorResponse(int $responseCode, ?array $response = [], bool $isTwoFactorAuth = false) 1313 public function throwSpecificLoginErrorResponse(int $responseCode, ?array $response = [], bool $isTwoFactorAuth = false): void 1324 1314 { 1325 1315 $response = (array) $response; // Ensure we have an array 1326 1316 $responseBody = json_decode(wp_remote_retrieve_body($response), true); 1327 1317 1328 $responseMessage = esc_html__('No error received from remote.', 'simplybook');1318 $responseMessage = __('No error received from remote.', 'simplybook'); 1329 1319 if (is_array($responseBody) && !empty($responseBody['message'])) { 1330 1320 $responseMessage = $responseBody['message']; … … 1333 1323 switch ($responseCode) { 1334 1324 case 400: 1335 $message = esc_html__('Invalid login or password, please try again.', 'simplybook');1325 $message = __('Invalid login or password, please try again.', 'simplybook'); 1336 1326 if ($isTwoFactorAuth) { 1337 $message = esc_html__('Incorrect 2FA authentication code, please try again.', 'simplybook');1327 $message = __('Incorrect 2FA authentication code, please try again.', 'simplybook'); 1338 1328 } 1339 1329 break; 1340 1330 case 403: 1341 $message = esc_html__('Too many login attempts. Verify your credentials and try again in a few minutes.', 'simplybook');1331 $message = __('Too many login attempts. Verify your credentials and try again in a few minutes.', 'simplybook'); 1342 1332 break; 1343 1333 case 404: 1344 $message = esc_html__("Could not find a company associated with that company login.", 'simplybook');1334 $message = __("Could not find a company associated with that company login.", 'simplybook'); 1345 1335 break; 1346 1336 default: 1347 $message = esc_html__('Authentication failed, please verify your credentials.', 'simplybook');1337 $message = __('Authentication failed, please verify your credentials.', 'simplybook'); 1348 1338 } 1349 1339 … … 1422 1412 { 1423 1413 $providerLabels = [ 1424 'ga' => esc_html__('Google Authenticator', 'simplybook'),1425 'sms' => esc_html__('SMS', 'simplybook'),1414 'ga' => __('Google Authenticator', 'simplybook'), 1415 'sms' => __('SMS', 'simplybook'), 1426 1416 ]; 1427 1417 … … 1429 1419 foreach ($providerKeys as $provider) { 1430 1420 $allowedProviders[$provider] = ($providerLabels[$provider] ?? 1431 esc_html__('Unknown 2FA provider', 'simplybook'));1421 __('Unknown 2FA provider', 'simplybook')); 1432 1422 } 1433 1423 … … 1437 1427 /** 1438 1428 * Get the list of themes available for the company 1439 * @uses \SimplyBook\Http\JsonRpcClient1440 1429 * @throws \Exception 1441 1430 */ … … 1465 1454 } 1466 1455 1467 $response = $this->jsonRpcClient->setUrl( 1468 $this->endpoint('public', '', false) 1469 )->setHeaders([ 1470 'X-Company-Login: ' . $this->get_company_login(), 1471 'X-User-Token: ' . $this->getToken('public'), 1472 ])->getThemeList(); 1456 $response = $this->post('public', json_encode([ 1457 'jsonrpc' => '2.0', 1458 'method' => 'getThemeList', 1459 'id' => 1, 1460 ])); 1473 1461 1474 1462 $data['created_at_utc'] = Carbon::now('UTC')->toDateTimeString(); 1475 $data['themes'] = $response ;1463 $data['themes'] = $response['result'] ?? []; 1476 1464 1477 1465 update_option('simplybook_cached_theme_list', $data); … … 1482 1470 /** 1483 1471 * Get the timeline setting options that are available for the company 1484 * @uses \SimplyBook\Http\JsonRpcClient1485 1472 */ 1486 1473 public function getTimelineList(): array … … 1509 1496 } 1510 1497 1511 $response = $this->jsonRpcClient->setUrl( 1512 $this->endpoint('public', '', false) 1513 )->setHeaders([ 1514 'X-Company-Login: ' . $this->get_company_login(), 1515 'X-User-Token: ' . $this->getToken('public'), 1516 ])->getTimelineList(); 1498 $response = $this->post('public', json_encode([ 1499 'jsonrpc' => '2.0', 1500 'method' => 'getTimelineList', 1501 'id' => 1, 1502 ])); 1517 1503 1518 1504 $data['created_at_utc'] = Carbon::now('UTC')->toDateTimeString(); 1519 $data['list'] = $response ;1505 $data['list'] = $response['result'] ?? []; 1520 1506 1521 1507 update_option('simplybook_cached_timeline_list', $data); 1522 wp_cache_add('simplybook_timeline_list', $ response, 'simplybook', (2 * DAY_IN_SECONDS));1523 return $ response;1508 wp_cache_add('simplybook_timeline_list', $data, 'simplybook', (2 * DAY_IN_SECONDS)); 1509 return $data; 1524 1510 } 1525 1511 … … 1531 1517 private function getReferrer(): string 1532 1518 { 1533 return (defined(' \EXTENDIFY_PARTNER_ID') ? \EXTENDIFY_PARTNER_ID : 'wp');1519 return (defined('EXTENDIFY_PARTNER_ID') ? \EXTENDIFY_PARTNER_ID : 'wp'); 1534 1520 } 1535 1521 … … 1550 1536 * @throws \Exception 1551 1537 */ 1552 public function get(string $endpoint) 1538 public function get(string $endpoint): array 1553 1539 { 1554 1540 if ($this->company_registration_complete() === false) { … … 1572 1558 * @throws RestDataException 1573 1559 */ 1574 public function put( $endpoint, string $payload): array1560 public function put(string $endpoint, string $payload): array 1575 1561 { 1576 1562 return $this->request('PUT', $endpoint, $payload); … … 1582 1568 * @throws RestDataException 1583 1569 */ 1584 public function post( $endpoint, string $payload): array1570 public function post(string $endpoint, string $payload): array 1585 1571 { 1586 1572 return $this->request('POST', $endpoint, $payload); … … 1592 1578 * @throws RestDataException 1593 1579 */ 1594 public function delete( $endpoint): array1580 public function delete(string $endpoint): array 1595 1581 { 1596 1582 return $this->request('DELETE', $endpoint); … … 1617 1603 } 1618 1604 1605 // For JSON RPC endpoints (endpoint is exactly 'public'), use v1 API 1606 $useV2 = ($endpoint !== 'public'); 1607 1619 1608 $response = wp_safe_remote_request( 1620 $this->endpoint($endpoint ),1609 $this->endpoint($endpoint, '', $useV2), 1621 1610 $requestArgs 1622 1611 ); … … 1634 1623 $responseMessage = wp_remote_retrieve_response_message($response); 1635 1624 $responseBody = wp_remote_retrieve_body($response); 1636 $responseData = is_array($responseBody) ? $responseBody : json_decode($responseBody, true); 1637 1638 if (!($responseCode >= 200 && $responseCode < 300)) { 1625 1626 $responseData = json_decode($responseBody, true); 1627 $jsonError = json_last_error(); 1628 1629 if ($jsonError !== JSON_ERROR_NONE) { 1630 $responseData = []; 1631 } 1632 1633 if ($responseCode < 200 || $responseCode >= 300) { 1639 1634 throw (new RestDataException($responseMessage)) 1640 1635 ->setResponseCode($responseCode) 1641 ->setData($responseData ?: []);1642 } 1643 1644 return $responseData ?: [];1636 ->setData($responseData); 1637 } 1638 1639 return $responseData; 1645 1640 } 1646 1641 … … 1669 1664 * cached data for a specific endpoint. 1670 1665 * @uses wp_cache_get 1666 * @return false|mixed 1671 1667 */ 1672 1668 private function getRequestCache(string $endpoint) -
simplybook/trunk/app/Http/Endpoints/AbstractCrudEndpoint.php
r3384996 r3399722 67 67 return $this->createItem($requestStorage); 68 68 default: 69 return $this->sendHttpResponse([], false, esc_html__('Method not allowed', 'simplybook'), 405);69 return $this->sendHttpResponse([], false, __('Method not allowed', 'simplybook'), 405); 70 70 } 71 71 } … … 90 90 { 91 91 if ($request->isEmpty()) { 92 return $this->sendHttpResponse([], false, esc_html__('Could not create entity, no data provided.', 'simplybook'), 405);92 return $this->sendHttpResponse([], false, __('Could not create entity, no data provided.', 'simplybook'), 405); 93 93 } 94 94 … … 101 101 } 102 102 103 $successMessage = $this->entity->name . ' ' . esc_html__('successfully saved!', 'simplybook'); 103 // translators: %s is either 'Service' or 'Service Provider' 104 $successMessage = sprintf( 105 __('%s successfully saved!', 'simplybook'), 106 $this->entity->getName() 107 ); 108 104 109 return $this->sendHttpResponse($this->entity->attributes(), true, $successMessage); 105 110 } … … 124 129 return $this->deleteEntity($requestStorage); 125 130 default: 126 return $this->sendHttpResponse([], false, esc_html__('Method not allowed', 'simplybook'), 405);131 return $this->sendHttpResponse([], false, __('Method not allowed', 'simplybook'), 405); 127 132 } 128 133 } … … 142 147 return $this->sendHttpResponse([ 143 148 'error' => $e->getMessage() 144 ], false, esc_html__('Entity not found!', 'simplybook'), 404);149 ], false, __('Entity not found!', 'simplybook'), 404); 145 150 } 146 151 … … 162 167 } 163 168 164 $successMessage = $this->entity->name . ' ' . esc_html__('successfully saved!', 'simplybook'); 169 // translators: %s is either 'Service' or 'Service Provider' 170 $successMessage = sprintf( 171 __('%s successfully saved!', 'simplybook'), 172 $this->entity->getName() 173 ); 174 165 175 return $this->sendHttpResponse($this->entity->attributes(), true, $successMessage); 166 176 } … … 174 184 { 175 185 try { 176 $this->entity-> id = $request->getString('id');186 $this->entity->setPrimaryValue($request->getString('id')); 177 187 $this->entity->delete(); 178 188 } catch (\Throwable $e) { 179 189 return $this->sendHttpResponse([ 180 190 'error' => $e->getMessage() 181 ], false, esc_html__('Something went wrong while deleting.', 'simplybook'), 400);191 ], false, __('Something went wrong while deleting.', 'simplybook'), 400); 182 192 } 183 193 … … 203 213 } 204 214 205 return $this->sendHttpResponse([], false, esc_html__('An unknown error occurred. Please try again later.', 'simplybook'), 400);215 return $this->sendHttpResponse([], false, __('An unknown error occurred. Please try again later.', 'simplybook'), 400); 206 216 } 207 217 … … 233 243 if (empty($exceptionData['data'])) { 234 244 return new \WP_REST_Response([ 235 'message' => esc_html__('An unknown error occurred while saving, please try again.', 'simplybook'),245 'message' => __('An unknown error occurred while saving, please try again.', 'simplybook'), 236 246 ], 403); 237 247 } … … 241 251 242 252 return new \WP_REST_Response([ 243 'message' => esc_html__('An error occurred while saving, please try again.', 'simplybook'),253 'message' => __('An error occurred while saving, please try again.', 'simplybook'), 244 254 'errors' => $translatedErrors, 245 255 ], 403); -
simplybook/trunk/app/Http/Endpoints/BlockEndpoints.php
r3384996 r3399722 79 79 * Return the categories as an array. 80 80 */ 81 public function getCategories() 81 public function getCategories(): array 82 82 { 83 83 if (!$this->companyRegistrationIsCompleted()) { … … 102 102 103 103 /** 104 * Deprecated when the {@see \SimplyBook\Http\Endpoints\ ProvidersEndpoint}104 * Deprecated when the {@see \SimplyBook\Http\Endpoints\ServicesProvidersEndpoint} 105 105 * also adds the 'any' provider to the response. And when the Gutenberg 106 106 * block can handle the response. … … 119 119 $anyProvider = [ 120 120 'id' => 'any', 121 'name' => esc_html__('Any provider', 'simplybook'),121 'name' => __('Any provider', 'simplybook'), 122 122 'qty' => 1 123 123 ]; -
simplybook/trunk/app/Http/Endpoints/LogOutEndpoint.php
r3384996 r3399722 50 50 { 51 51 if ($request->get_param('user_confirmed') === false) { 52 return $this->sendHttpResponse([], true, esc_html__('User prevented logout.', 'simplybook'));52 return $this->sendHttpResponse([], true, __('User prevented logout.', 'simplybook')); 53 53 } 54 54 55 55 $success = $this->delete_all_options(); 56 $message = esc_html__('User is logged out and will be redirected to onboarding.', 'simplybook');56 $message = __('User is logged out and will be redirected to onboarding.', 'simplybook'); 57 57 if (!$success) { 58 $message = esc_html__('Failed to log out user.', 'simplybook');58 $message = __('Failed to log out user.', 'simplybook'); 59 59 } 60 60 $code = $success ? 200 : 500; -
simplybook/trunk/app/Http/Endpoints/NoticesDismissEndpoint.php
r3384996 r3399722 64 64 [], 65 65 false, 66 esc_html__('Failed to dismiss notice.', 'simplybook'),66 __('Failed to dismiss notice.', 'simplybook'), 67 67 500 68 68 ); … … 72 72 ['notice_type' => $noticeType], 73 73 true, 74 esc_html__('Notice dismissed successfully.', 'simplybook')74 __('Notice dismissed successfully.', 'simplybook') 75 75 ); 76 76 } -
simplybook/trunk/app/Http/Endpoints/SettingEndpoints.php
r3384996 r3399722 112 112 return $this->sendHttpResponse([ 113 113 'errors' => $e->getErrors(), 114 ], false, esc_html__('Error processing settings', 'simplybook'));114 ], false, __('Error processing settings', 'simplybook')); 115 115 } 116 116 -
simplybook/trunk/app/Http/Entities/AbstractEntity.php
r3384996 r3399722 10 10 abstract class AbstractEntity 11 11 { 12 /** 13 * Return the name of the entity. This can either be a generic name that 14 * represents the entity. Or a property like 'name' {@see Service} 15 * or {@see ServiceProvider} 16 */ 17 abstract public function getName(): string; 18 12 19 /** 13 20 * Get the remote endpoint URL for this entity. Used internally in the … … 33 40 * [ 34 41 * 'attribute_x' => [ 35 * 'not dynamic part of error string' => esc_html__('User friendly translation of error.', 'simplybook'),42 * 'not dynamic part of error string' => __('User friendly translation of error.', 'simplybook'), 36 43 * ], 37 44 * // Real example from the {@see Service} class: 38 45 * 'duration' => [ 39 46 * // "Duration is not multiple of '60' minutes" 40 * 'is not multiple of' => esc_html__('Duration invalid. Please enter a valid number that is a multiple of your selected timeframe.', 'simplybook'),47 * 'is not multiple of' => __('Duration invalid. Please enter a valid number that is a multiple of your selected timeframe.', 'simplybook'), 41 48 * ] 42 49 * ] … … 82 89 { 83 90 $this->registerConditionalProperties(); 91 } 92 93 /** 94 * Method is used so set the main identifier of a local entity object to 95 * the one on the remote. Currently used to delete an entity by id 96 * {@see AbstractCrudEndpoint} 97 * @param mixed $value Usually a string value 98 */ 99 public function setPrimaryValue($value): void 100 { 101 $this->attributes[$this->primaryKey] = $value; 84 102 } 85 103 … … 139 157 * Register the current entity as initializing. 140 158 */ 141 protected function enableFirstInitialize() 159 protected function enableFirstInitialize(): void 142 160 { 143 161 $this->initializing = true; … … 147 165 * Register the current entity as initialized. 148 166 */ 149 protected function disableFirstInitialize() 167 protected function disableFirstInitialize(): void 150 168 { 151 169 $this->initializing = false; … … 166 184 /** 167 185 * Check if the key is fillable. 186 * @param mixed $key 168 187 */ 169 188 protected function isFillable($key): bool … … 175 194 * Set an attribute and register it as changed if it is different from the 176 195 * previous value. 196 * @param mixed $value 177 197 */ 178 198 protected function setAttribute(string $key, $value): void … … 227 247 public function has(string $name): bool 228 248 { 229 return isset($this->attributes[$name]) && null !== $this->attributes[$name];249 return isset($this->attributes[$name]); 230 250 } 231 251 … … 254 274 255 275 foreach ($this->required as $attribute) { 276 // No empty() check to prevent falsy matches 256 277 $requiredFieldIsEmpty = ( 257 278 !isset($this->attributes[$attribute]) 258 || ($this->attributes[$attribute] === null || $this->attributes[$attribute] === '')279 || $this->attributes[$attribute] === '' 259 280 ); 260 281 261 282 if ($requiredFieldIsEmpty) { 262 283 $errors[$attribute] = [ 263 esc_html__('Field is required.', 'simplybook'),284 __('Field is required.', 'simplybook'), 264 285 ]; 265 286 } … … 359 380 360 381 /** 361 * Find a entity by ID. If no ID is provided, use the current instance.362 * Throws an exception if the entity is not found.382 * Find an entity by its primary. If no primary is provided, use the current 383 * instance. Throws an exception if the entity is not found. 363 384 * @throws \Exception|RestDataException 364 385 */ 365 public function find(string $ id= ''): AbstractEntity366 { 367 $ id = ($id ?: $this->id);368 369 $endpoint = trailingslashit($this->getEndpoint()) . sanitize_text_field($ id);386 public function find(string $primary = ''): AbstractEntity 387 { 388 $primary = ($primary ?: $this->{$this->primaryKey}); 389 390 $endpoint = trailingslashit($this->getEndpoint()) . sanitize_text_field($primary); 370 391 $entityData = App::client()->get($endpoint); 371 392 … … 403 424 $this->validate(); 404 425 405 $endpoint = trailingslashit($this->getEndpoint()) . sanitize_text_field($this-> id);426 $endpoint = trailingslashit($this->getEndpoint()) . sanitize_text_field($this->{$this->primaryKey}); 406 427 App::client()->put($endpoint, $this->json()); 407 428 … … 416 437 * @internal Override this method if you want to customize the logic. 417 438 */ 418 public function delete(string $ id= ''): bool419 { 420 $ id = ($id ?: $this->id);421 if (empty($ id)) {422 throw new \InvalidArgumentException('Entity IDis required for deletion');423 } 424 425 $endpoint = trailingslashit($this->getEndpoint()) . $ id;439 public function delete(string $primary = ''): bool 440 { 441 $primary = ($primary ?: $this->{$this->primaryKey}); 442 if (empty($primary)) { 443 throw new \InvalidArgumentException('Entity primary is required for deletion'); 444 } 445 446 $endpoint = trailingslashit($this->getEndpoint()) . $primary; 426 447 App::client()->delete($endpoint); 427 448 -
simplybook/trunk/app/Http/Entities/Service.php
r3384996 r3399722 41 41 * @inheritDoc 42 42 */ 43 public function getName(): string 44 { 45 return $this->name ?: __('Service', 'simplybook'); 46 } 47 48 /** 49 * @inheritDoc 50 */ 43 51 public function getEndpoint(): string 44 52 { … … 61 69 return [ 62 70 'duration' => [ 63 'is not multiple of' => esc_html__('Duration invalid. Please enter a valid number that is a multiple of your selected timeframe.', 'simplybook'),64 'is not between' => esc_html__('Duration invalid. Please enter a valid number between 5 and 1435.', 'simplybook'),71 'is not multiple of' => __('Duration invalid. Please enter a valid number that is a multiple of your selected timeframe.', 'simplybook'), 72 'is not between' => __('Duration invalid. Please enter a valid number between 5 and 1435.', 'simplybook'), 65 73 ], 66 74 ]; … … 69 77 /** 70 78 * Ensure the service ID is a non-negative integer 79 * @param mixed $value 71 80 */ 72 81 public function setIdAttribute($value): int … … 78 87 /** 79 88 * Sanitize the service name as a text field. 89 * @param mixed $value 80 90 */ 81 91 protected function setNameAttribute($value): string … … 86 96 /** 87 97 * Ensure the service price is a non-negative float. 98 * @param mixed $value 88 99 */ 89 100 protected function setPriceAttribute($value): float … … 95 106 /** 96 107 * Ensure the service duration is a positive integer (minimum 1 minute). 108 * @param mixed $value 97 109 */ 98 110 protected function setDurationAttribute($value): int … … 104 116 /** 105 117 * Ensure the visibility status is a boolean. 118 * @param mixed $value 106 119 */ 107 120 protected function setIsVisibleAttribute($value): bool -
simplybook/trunk/app/Http/Entities/ServiceProvider.php
r3384996 r3399722 44 44 * @inheritDoc 45 45 */ 46 public function getName(): string 47 { 48 return $this->name ?: __('Service Provider', 'simplybook'); 49 } 50 51 /** 52 * @inheritDoc 53 */ 46 54 public function getEndpoint(): string 47 55 { … … 64 72 return [ 65 73 'phone' => [ 66 'invalid' => esc_html__('Phone format invalid. Please enter a valid phone number with country code (e.g., +31 123 456 789)', 'simplybook'),67 'not contain letters' => esc_html__('Phone format invalid. Please enter a valid phone number without using letters.', 'simplybook'),74 'invalid' => __('Phone format invalid. Please enter a valid phone number with country code (e.g., +31 123 456 789)', 'simplybook'), 75 'not contain letters' => __('Phone format invalid. Please enter a valid phone number without using letters.', 'simplybook'), 68 76 ], 69 77 'email' => [ 70 'not a valid hostname' => esc_html__('The email address is invalid. Please verify your input and try again.', 'simplybook'),71 'hostname but cannot match' => esc_html__('The email address is invalid. Please verify your input and try again.', 'simplybook'),72 'local network name' => esc_html__('The email address is invalid. Please verify your input and try again.', 'simplybook'),73 'only once per day' => esc_html__('The email address can only be changed once per day.', 'simplybook'),78 'not a valid hostname' => __('The email address is invalid. Please verify your input and try again.', 'simplybook'), 79 'hostname but cannot match' => __('The email address is invalid. Please verify your input and try again.', 'simplybook'), 80 'local network name' => __('The email address is invalid. Please verify your input and try again.', 'simplybook'), 81 'only once per day' => __('The email address can only be changed once per day.', 'simplybook'), 74 82 ], 75 83 ]; … … 78 86 /** 79 87 * Ensure the provider ID is a non-negative integer 88 * @param mixed $value 80 89 */ 81 90 public function setIdAttribute($value): int … … 87 96 /** 88 97 * Sanitize the provider name as a text field. 98 * @param mixed $value 89 99 */ 90 100 protected function setNameAttribute($value): string … … 95 105 /** 96 106 * Ensure the visibility status is a boolean. 107 * @param mixed $value 97 108 */ 98 109 protected function setIsVisibleAttribute($value): bool … … 103 114 /** 104 115 * Sanitize the provider email as a valid email address. 116 * @param mixed $value 105 117 */ 106 118 protected function setEmailAttribute($value): string … … 113 125 * This is a simple sanitization, you might want to use a more complex 114 126 * validation depending on your requirements. 127 * @param mixed $value 115 128 */ 116 129 protected function setPhoneAttribute($value): string … … 122 135 * Ensure the provider quantity is a non-negative integer. SimplyBook.me 123 136 * requires a positive quantity, so we ensure it's at least 1. 137 * @param mixed $value 124 138 */ 125 139 protected function setQtyAttribute($value): int -
simplybook/trunk/app/Interfaces/ControllerInterface.php
r3384996 r3399722 15 15 * process of the plugin. 16 16 */ 17 public function register() ;17 public function register(): void; 18 18 } -
simplybook/trunk/app/Interfaces/FeatureInterface.php
r3384996 r3399722 15 15 * process of the plugin. 16 16 */ 17 public function register() ;17 public function register(): void; 18 18 } -
simplybook/trunk/app/Interfaces/NoticeInterface.php
r3384996 r3399722 17 17 /** 18 18 * Method is used to add a link to the UI of the notice item. 19 * @example (normal link)19 * Example (normal link): 20 20 * [ 21 21 * 'text' => 'Link text', 22 22 * 'link' => 'https://example.com' | '/services/new, 23 23 * ] 24 * @example (login link)24 * Example (login link): 25 25 * [ 26 26 * 'text' => 'Link text', … … 35 35 */ 36 36 public function toArray(): array; 37 38 /** 39 * Use this method to set the notice as active based on a server-side 40 * condition. By default, a notice can activate based on a client-side 41 * condition. 42 */ 43 public function setActive(bool $state = false): void; 37 44 } -
simplybook/trunk/app/Interfaces/ProviderInterface.php
r3384996 r3399722 9 9 * functionality. 10 10 */ 11 public function provide() ;11 public function provide(): void; 12 12 } -
simplybook/trunk/app/Interfaces/TaskInterface.php
r3384996 r3399722 52 52 */ 53 53 public function toArray(): array; 54 55 /** 56 * Reads if the task is required 57 */ 58 public function isRequired(): bool; 54 59 } -
simplybook/trunk/app/Managers/AbstractManager.php
r3384996 r3399722 63 63 foreach ($classes as $fullyClassifiedName) { 64 64 if (is_string($fullyClassifiedName) === false) { 65 throw new \LogicException("Class must be a fully qualified name: " . esc_html($fullyClassifiedName)); 65 $type = gettype($fullyClassifiedName); 66 throw new \LogicException("Class must be a fully qualified name. Given type: $type"); 66 67 } 67 68 -
simplybook/trunk/app/Managers/EndpointManager.php
r3384996 r3399722 13 13 use HasAllowlistControl; 14 14 15 private string $version;16 private string $namespace;17 15 private array $routes = []; 18 16 … … 185 183 return new \WP_Error( 186 184 'rest_forbidden', 187 esc_html__('Forbidden.', 'simplybook'),185 __('Forbidden.', 'simplybook'), 188 186 ['status' => 403] 189 187 ); -
simplybook/trunk/app/Services/CapabilityService.php
r3384996 r3399722 47 47 $sites = get_sites(); 48 48 foreach ($sites as $site) { 49 switch_to_blog( $site->blog_id);49 switch_to_blog((int) $site->blog_id); 50 50 $this->addSiteCapability($capability, false); 51 51 restore_current_blog(); -
simplybook/trunk/app/Services/DesignSettingsService.php
r3384996 r3399722 51 51 * Get the configuration for the design settings. This is used to validate 52 52 * the settings. 53 * @return mixed|array 53 54 */ 54 55 public function getDesignConfiguration() … … 67 68 * @uses wp_cache_set Set the cache for 60 seconds. 68 69 */ 69 public function getDesignOptions() 70 public function getDesignOptions(): array 70 71 { 71 72 if ($cache = wp_cache_get('design_settings', 'simplybook')) { … … 113 114 * simplybookMePl_widget_settings 114 115 */ 115 public function handleLegacyDesignUpgrade() 116 public function handleLegacyDesignUpgrade(): void 116 117 { 117 118 $legacyDesignSettings = $this->get_config_obsolete('widget_settings'); … … 193 194 194 195 $invalid = false; 195 $errorMessage = esc_html__('Invalid value for setting', 'simplybook') . ': ' . ($config['label'] ?? $config['id']);196 $errorMessage = __('Invalid value for setting', 'simplybook') . ': ' . ($config['label'] ?? $config['id']); 196 197 197 198 // Saved value does not match regex -
simplybook/trunk/app/Services/NoticeDismissalService.php
r3384996 r3399722 69 69 * admin_enqueue_scripts filter. 70 70 */ 71 public function enqueue() 71 public function enqueue(): void 72 72 { 73 73 if (current_filter() !== 'admin_enqueue_scripts') { -
simplybook/trunk/app/Services/RelatedPluginService.php
r3384996 r3399722 25 25 * example see {@see \SimplyBook\Http\Endpoints\RelatedPluginEndpoints} 26 26 */ 27 public function setPluginConfig(array $pluginConfig) 27 public function setPluginConfig(array $pluginConfig): void 28 28 { 29 29 $this->pluginConfig = new Storage($pluginConfig); -
simplybook/trunk/app/Services/SubscriptionDataService.php
r3384996 r3399722 60 60 * @param string $key The key to search for in the subscription data, a 61 61 * semicolon can be used for dot notation instead of a dot. 62 * @param mixed $default The default value to return if the key is not found 62 63 * @example /wp-json/simplybook/v1/subscription_data/limits:booking-website 63 64 * @return mixed The value of the key in the subscription data. 64 65 */ 65 public function search(string $key )66 public function search(string $key, $default = null) 66 67 { 67 68 $storage = new Storage($this->all()); … … 69 70 $key = str_replace(':', '.', $key); 70 71 71 return $storage->get($key );72 return $storage->get($key, $default); 72 73 } 73 74 -
simplybook/trunk/app/Services/WidgetTrackingService.php
r3384996 r3399722 18 18 19 19 private int $postId; 20 private \WP_Post $post;20 private ?\WP_Post $post = null; 21 21 22 22 /** -
simplybook/trunk/app/Support/Builders/CompanyBuilder.php
r3384996 r3399722 95 95 } 96 96 97 public function setTerms( string$terms): CompanyBuilder97 public function setTerms(bool $terms): CompanyBuilder 98 98 { 99 99 $this->terms = $terms; -
simplybook/trunk/app/Support/Builders/PageBuilder.php
r3384996 r3399722 64 64 ]; 65 65 66 /** @var int|\WP_Error $insertedPageId */ 66 67 $insertedPageId = wp_insert_post($page); 67 68 if (is_wp_error($insertedPageId)) { … … 88 89 ]; 89 90 91 /** @var int|\WP_Error $updatedPostId */ 90 92 $updatedPostId = wp_update_post($page); 91 93 if (is_wp_error($updatedPostId)) { -
simplybook/trunk/app/Support/Builders/WidgetScriptBuilder.php
r3384996 r3399722 194 194 /** 195 195 * Create HTML for the widget script given via the parameter 196 * 197 * @since 3.2.3 Remove newlines from widget HTML to prevent WordPress's 198 * wpautop filter from breaking script content in FSE contexts. 199 * wpautop uses preg_split() on double line breaks to identify content 200 * blocks and wraps them in <p> tags. When newlines exist in the JavaScript, 201 * wpautop inserts <p> tags within the script, breaking JavaScript syntax. 196 202 */ 197 203 private function getWrappedScriptHTML(string $script): string … … 206 212 $content .= sprintf('<div id="%s"></div>', $this->wrapperID); 207 213 } 208 209 214 $content .= sprintf('<script type="text/javascript">%s</script>', $script); 210 return $content; 215 216 // Remove all newlines 217 return str_replace(["\r\n", "\r", "\n"], '', $content); 211 218 } 212 219 -
simplybook/trunk/app/Support/Helpers/Request.php
r3384996 r3399722 13 13 * Code that uses this class should validate the data before using it. 14 14 */ 15 class Request extends Storage15 final class Request extends Storage 16 16 { 17 17 //phpcs:disable 18 18 public static function fromGlobal(): Request 19 19 { 20 return new s tatic($_REQUEST);20 return new self($_REQUEST); 21 21 } 22 22 … … 24 24 { 25 25 $data = (!empty($_SESSION) ? $_SESSION : []); 26 return new s tatic($data);26 return new self($data); 27 27 } 28 28 29 29 public static function fromFiles(): Request 30 30 { 31 return new s tatic($_FILES);31 return new self($_FILES); 32 32 } 33 33 //phpcs:enable -
simplybook/trunk/app/Support/Helpers/Storage.php
r3384996 r3399722 15 15 { 16 16 /** 17 * Create a new Storage instance with dot notation functionality from the 18 * parent {@see Dot} class. This internal class is extendable but the 19 * construct should not be overridable, it is therefor made final. 20 */ 21 final public function __construct($items = [], $parse = false, $delimiter = ".") 22 { 23 parent::__construct($items, $parse, $delimiter); 24 } 25 26 /** 17 27 * Returns the parameter keys. 18 28 */ … … 136 146 * Returns the parameter value typecast as float. 137 147 */ 138 public function getFloat(string $key, $default = 0): float148 public function getFloat(string $key, float $default = 0): float 139 149 { 140 150 return (float) $this->get($key, $default); … … 145 155 * FILTER_VALIDATE_BOOLEAN 146 156 */ 147 public function getBoolean(string $key, $default = false): bool157 public function getBoolean(string $key, bool $default = false): bool 148 158 { 149 159 return $this->filter($key, $default, FILTER_VALIDATE_BOOLEAN); … … 167 177 /** 168 178 * Returns a boolean if the value is considered not empty. 169 * @param array< TKey>|int|string|null $keys179 * @param array<array-key>|int|string|null $keys 170 180 */ 171 181 public function isNotEmpty($keys = null): bool … … 176 186 /** 177 187 * Returns a boolean if the value of one of the keys is considered empty. 178 * @param array< TKey>|int|string|null$keys179 */ 180 public function isOneEmpty( $keys = []): bool188 * @param array<int,array-key> $keys 189 */ 190 public function isOneEmpty(array $keys = []): bool 181 191 { 182 192 foreach ($keys as $key) { … … 191 201 /** 192 202 * Filter key. 203 * @param mixed $default 204 * @param array|int $options 193 205 * @return mixed 194 206 * @see http://php.net/manual/en/function.filter-var.php -
simplybook/trunk/app/Support/Helpers/Uninstall.php
r3384996 r3399722 17 17 { 18 18 $instance = new self(); 19 20 /** @phpstan-ignore-next-line Extra failsafe is needed because class is loaded in uninstall context */ 19 21 if (method_exists($instance, 'delete_all_options')) { 20 22 $instance->delete_all_options(true); -
simplybook/trunk/app/Support/Widgets/ElementorWidget.php
r3384996 r3399722 132 132 private function addLocationControl(): void 133 133 { 134 $client = App::client(); 135 if (!$client || !$client->isSpecialFeatureEnabled('location')) { 134 if (!App::client()->isSpecialFeatureEnabled('location')) { 136 135 return; 137 136 } … … 153 152 private function addServiceCategoryControl(): void 154 153 { 155 $client = App::client(); 156 if (!$client || !$client->isSpecialFeatureEnabled('event_category')) { 154 if (!App::client()->isSpecialFeatureEnabled('event_category')) { 157 155 return; 158 156 } -
simplybook/trunk/app/Traits/HasApiAccess.php
r3384996 r3399722 8 8 { 9 9 /** 10 * Checks if SimplyBook registration is complete with 60s caching. 10 * Checks if SimplyBook registration is complete 11 * Delegates to ApiClient 11 12 */ 12 13 public function companyRegistrationIsCompleted(): bool 13 14 { 14 $cacheKey = 'simplybook_is_authorized'; 15 if ($cache = wp_cache_get($cacheKey, 'simplybook')) { 16 return $cache; 17 } 18 19 $isAuthorized = App::client()->company_registration_complete(); 20 21 wp_cache_set($cacheKey, $isAuthorized, 'simplybook', 60); 22 return $isAuthorized; 15 return App::client()->company_registration_complete(); 23 16 } 24 17 } -
simplybook/trunk/app/Traits/HasEncryption.php
r3384996 r3399722 90 90 private function decryptLegacyString(string $encryptedString, string $legacyKey): string 91 91 { 92 $data = base64_decode($encryptedString );92 $data = base64_decode($encryptedString, true); 93 93 94 94 if ($data === false) { … … 100 100 if (strlen($data) < $ivLength) { 101 101 // Try double base64 decoding for legacy compatibility 102 $data = base64_decode($data );102 $data = base64_decode($data, true); 103 103 if ($data === false || strlen($data) < $ivLength) { 104 104 return ''; -
simplybook/trunk/app/Traits/HasViews.php
r3384996 r3399722 21 21 } 22 22 23 if ( empty($filePath) ||!file_exists($filePath) || !is_readable($filePath)) {23 if (!file_exists($filePath) || !is_readable($filePath)) { 24 24 return ''; 25 25 } -
simplybook/trunk/app/Traits/LegacyLoad.php
r3384996 r3399722 17 17 use HasEncryption; 18 18 19 public $fields = [];20 public $values_loaded = false;21 22 public $counter = 0;19 public array $fields = []; 20 public bool $values_loaded = false; 21 22 public int $counter = 0; 23 23 24 24 /** … … 197 197 * @throws \LogicException For developers 198 198 */ 199 public function get_domain(bool $validate = true) 199 public function get_domain(bool $validate = true): string 200 200 { 201 201 if ($cache = wp_cache_get('simplybook_get_domain_legacy_load', 'simplybook')) { -
simplybook/trunk/app/Traits/LegacySave.php
r3384996 r3399722 34 34 * 35 35 * @deprecated 36 * @param $key 37 * @param $default 36 * @param mixed $default 38 37 * @return mixed 39 38 */ 40 public function get_config_obsolete( $key, $default = null)39 public function get_config_obsolete(string $key, $default = null) 41 40 { 42 41 $key = 'simplybookMePl_' . $key; … … 178 177 /** 179 178 * Save data in the config 180 * @param $key 181 * @param $value 179 * @param mixed $value 182 180 * @param bool $staleOverride Flag to indicate that you as a developer knows 183 181 * that the field is stale, and you want to save it anyway. This is used … … 189 187 * @return bool 190 188 */ 191 public function update_option( $key, $value, bool $staleOverride = false, array $config = []): bool189 public function update_option(string $key, $value, bool $staleOverride = false, array $config = []): bool 192 190 { 193 191 if ( !$this->adminAccessAllowed() ) { … … 217 215 218 216 // todo - usage of sanitize_field is redundant when used as in the OnboardingService 219 $value = $this->sanitize_field($value, $config['type'], ($config['regex'] ?? null));217 $value = $this->sanitize_field($value, $config['type'], ($config['regex'] ?? '')); 220 218 221 219 // todo - except for the encryption fields, maybe we can create a getEncrypted method in the Storage class? … … 230 228 /** 231 229 * Delete an option from the settings array 232 *233 * @param $key234 *235 * @return void236 230 */ 237 public function delete_option( $key): void231 public function delete_option(string $key): void 238 232 { 239 233 if ( !$this->adminAccessAllowed() ) { … … 249 243 } 250 244 251 public function update_options( $fields ): void { 245 public function update_options(array $fields): void 246 { 252 247 foreach ( $fields as $field ) { 253 248 $this->update_option( $field['id'], $field['value'] ); … … 259 254 /** 260 255 * Sanitize a value based on the field type 261 * 262 * @param $value 263 * @param string $type 256 * @param mixed $value 264 257 * @return int|string 265 258 */ 266 public function sanitize_field( $value, $type, $regex = '' ) { 259 public function sanitize_field($value, string $type, string $regex = '') 260 { 267 261 switch ( $type ) { 268 262 case 'checkbox': -
simplybook/trunk/assets/css/tailwind.generated.css
r3348078 r3399722 1 /*! tailwindcss v4.0.14 | MIT License | https://tailwindcss.com */@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(.936 .032 17.717);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-500:oklch(.795 .184 86.047);--color-yellow-900:oklch(.421 .095 57.708);--color-green-100:oklch(.962 .044 156.743);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-300:oklch(.809 .105 251.813);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-800:oklch(.424 .199 265.638);--color-slate-600:oklch(.446 .043 257.281);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:#dadada80;--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-neutral- 800:oklch(.269 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-md:48rem;--breakpoint-2xl:clamp(300px,100% - 20px*2,1600px);--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:.875rem;--text-base--line-height:1.5;--text-lg:1rem;--text-lg--line-height:1.55556;--text-xl:1.125rem;--text-xl--line-height:1.4;--text-2xl:1.375rem;--text-2xl--line-height:1.33333;--text-3xl:1.5rem;--text-3xl--line-height:1.2;--text-4xl:2rem;--text-4xl--line-height:1.11111;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:600;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--shadow-md:0px 9px 14px -2px #0000001a;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings);--text-xxs:.6825rem;--text-label:var(--text-base);--color-succes:var(--color-green-500);--color-succes-light:#eafaf3;--color-warning:var(--color-yellow-400);--color-error:var(--color-red-400);--bg-primary-light:#b3e4f9;--bg-primary:#06adef;--bg-primary-dark:#055b78;--color-primary-hover:#0589bd;--color-primary-lighter:#f8fcfe;--bg-secondary-light:#ffb3c1;--bg-secondary:#ff3259;--bg-secondary-dark:#950c28;--bg-tertiary-light:#d9e3fd;--bg-tertiary:#0c3052;--bg-tertiary-dark:#061f32;--color-sb-blue:#5a6fa5;--color-sb-gray:#788291;--color-tertiary-border:#eff4ff;--container-8xl:125rem}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}::file-selector-button{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{color:color-mix(in oklab,currentColor 50%,transparent);opacity:1}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components,utilities;#simplybook_app .\@container{container-type:inline-size}#simplybook_app .pointer-events-none{pointer-events:none}#simplybook_app .collapse{visibility:collapse}#simplybook_app .invisible{visibility:hidden}#simplybook_app .visible{visibility:visible}#simplybook_app .aspect-w-16{padding-bottom:calc(var(--tw-aspect-h)/var(--tw-aspect-w)*100%);--tw-aspect-w:16;position:relative}#simplybook_app .aspect-w-16>*{height:100%;inset:0;position:absolute;width:100%}#simplybook_app .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}#simplybook_app .absolute{position:absolute}#simplybook_app .fixed{position:fixed}#simplybook_app .relative{position:relative}#simplybook_app .static{position:static}#simplybook_app .sticky{position:sticky}#simplybook_app .inset-0{inset:calc(var(--spacing)*0)}#simplybook_app .start-0{inset-inline-start:calc(var(--spacing)*0)}#simplybook_app .-top-3{top:calc(var(--spacing)*-3)}#simplybook_app .top-0{top:calc(var(--spacing)*0)}#simplybook_app .top-2\.5{top:calc(var(--spacing)*2.5)}#simplybook_app .top-5\.5{top:calc(var(--spacing)*5.5)}#simplybook_app .top-16{top:calc(var(--spacing)*16)}#simplybook_app .-right-0\.5{right:calc(var(--spacing)*-.5)}#simplybook_app .-right-5{right:calc(var(--spacing)*-5)}#simplybook_app .right-\[0\.5rem\]{right:.5rem}#simplybook_app .bottom-0{bottom:calc(var(--spacing)*0)}#simplybook_app .isolate{isolation:isolate}#simplybook_app .-z-1{z-index:-1}#simplybook_app .z-10{z-index:10}#simplybook_app .z-50{z-index:50}#simplybook_app .z-60{z-index:60}#simplybook_app .z-999{z-index:999}#simplybook_app .z-99999{z-index:99999}#simplybook_app .order-6{order:6}#simplybook_app .col-span-3{grid-column:span 3/span 3}#simplybook_app .col-span-4{grid-column:span 4/span 4}#simplybook_app .col-span-5{grid-column:span 5/span 5}#simplybook_app .col-span-6{grid-column:span 6/span 6}#simplybook_app .col-span-12{grid-column:span 12/span 12}#simplybook_app .col-span-full{grid-column:1/-1}#simplybook_app .col-start-2{grid-column-start:2}#simplybook_app .col-start-3{grid-column-start:3}#simplybook_app .col-start-7{grid-column-start:7}#simplybook_app .row-span-1{grid-row:span 1/span 1}#simplybook_app .row-span-2{grid-row:span 2/span 2}#simplybook_app .float-left{float:left}#simplybook_app .float-right{float:right}@media (width>=40rem){#simplybook_app .container{max-width:40rem}}@media (width>=48rem){#simplybook_app .container{max-width:48rem}}@media (width>=64rem){#simplybook_app .container{max-width:64rem}}@media (width>=80rem){#simplybook_app .container{max-width:80rem}}#simplybook_app .m-0{margin:calc(var(--spacing)*0)}#simplybook_app .m-4{margin:calc(var(--spacing)*4)}#simplybook_app .m-5{margin:calc(var(--spacing)*5)}#simplybook_app .mx-2{margin-inline:calc(var(--spacing)*2)}#simplybook_app .mx-4{margin-inline:calc(var(--spacing)*4)}#simplybook_app .mx-5{margin-inline:calc(var(--spacing)*5)}#simplybook_app .mx-auto{margin-inline:auto}#simplybook_app .my-2{margin-block:calc(var(--spacing)*2)}#simplybook_app .my-4{margin-block:calc(var(--spacing)*4)}#simplybook_app .my-6{margin-block:calc(var(--spacing)*6)}#simplybook_app .my-10{margin-block:calc(var(--spacing)*10)}#simplybook_app .my-12{margin-block:calc(var(--spacing)*12)}#simplybook_app .-mt-4{margin-top:calc(var(--spacing)*-4)}#simplybook_app .-mt-20{margin-top:calc(var(--spacing)*-20)}#simplybook_app .mt-1{margin-top:calc(var(--spacing)*1)}#simplybook_app .mt-2{margin-top:calc(var(--spacing)*2)}#simplybook_app .mt-3{margin-top:calc(var(--spacing)*3)}#simplybook_app .mt-4{margin-top:calc(var(--spacing)*4)}#simplybook_app .mt-5{margin-top:calc(var(--spacing)*5)}#simplybook_app .mt-8{margin-top:calc(var(--spacing)*8)}#simplybook_app .mt-12{margin-top:calc(var(--spacing)*12)}#simplybook_app .mt-26{margin-top:calc(var(--spacing)*26)}#simplybook_app .mt-\[1px\]{margin-top:1px}#simplybook_app .\!mr-0{margin-right:calc(var(--spacing)*0)!important}#simplybook_app .mr-2{margin-right:calc(var(--spacing)*2)}#simplybook_app .mr-3{margin-right:calc(var(--spacing)*3)}#simplybook_app .mr-4{margin-right:calc(var(--spacing)*4)}#simplybook_app .mr-8{margin-right:calc(var(--spacing)*8)}#simplybook_app .mb-0{margin-bottom:calc(var(--spacing)*0)}#simplybook_app .mb-1{margin-bottom:calc(var(--spacing)*1)}#simplybook_app .mb-2{margin-bottom:calc(var(--spacing)*2)}#simplybook_app .mb-3{margin-bottom:calc(var(--spacing)*3)}#simplybook_app .mb-4{margin-bottom:calc(var(--spacing)*4)}#simplybook_app .mb-5{margin-bottom:calc(var(--spacing)*5)}#simplybook_app .mb-6{margin-bottom:calc(var(--spacing)*6)}#simplybook_app .mb-8{margin-bottom:calc(var(--spacing)*8)}#simplybook_app .mb-12{margin-bottom:calc(var(--spacing)*12)}#simplybook_app .mb-\[0\.70rem\]{margin-bottom:.7rem}#simplybook_app .ml-1{margin-left:calc(var(--spacing)*1)}#simplybook_app .ml-2{margin-left:calc(var(--spacing)*2)}#simplybook_app .ml-4{margin-left:calc(var(--spacing)*4)}#simplybook_app .ml-\[1px\]{margin-left:1px}#simplybook_app .ml-auto{margin-left:auto}#simplybook_app .block{display:block}#simplybook_app .contents{display:contents}#simplybook_app .flex{display:flex}#simplybook_app .grid{display:grid}#simplybook_app .hidden{display:none}#simplybook_app .inline{display:inline}#simplybook_app .inline-block{display:inline-block}#simplybook_app .inline-flex{display:inline-flex}#simplybook_app .list-item{display:list-item}#simplybook_app .table{display:table}#simplybook_app .table-caption{display:table-caption}#simplybook_app .table-cell{display:table-cell}#simplybook_app .table-column{display:table-column}#simplybook_app .table-column-group{display:table-column-group}#simplybook_app .table-footer-group{display:table-footer-group}#simplybook_app .table-header-group{display:table-header-group}#simplybook_app .table-row{display:table-row}#simplybook_app .table-row-group{display:table-row-group}#simplybook_app .size-1{width:calc(var(--spacing)*1)}#simplybook_app .h-1,#simplybook_app .size-1{height:calc(var(--spacing)*1)}#simplybook_app .h-3{height:calc(var(--spacing)*3)}#simplybook_app .h-4{height:calc(var(--spacing)*4)}#simplybook_app .h-5{height:calc(var(--spacing)*5)}#simplybook_app .h-6{height:calc(var(--spacing)*6)}#simplybook_app .h-8{height:calc(var(--spacing)*8)}#simplybook_app .h-10{height:calc(var(--spacing)*10)}#simplybook_app .h-12{height:calc(var(--spacing)*12)}#simplybook_app .h-20{height:calc(var(--spacing)*20)}#simplybook_app .h-40{height:calc(var(--spacing)*40)}#simplybook_app .h-\[18px\]{height:18px}#simplybook_app .h-\[70vh\]{height:70vh}#simplybook_app .h-\[290px\]{height:290px}#simplybook_app .h-auto{height:auto}#simplybook_app .h-full{height:100%}#simplybook_app .h-max{height:max-content}#simplybook_app .max-h-0{max-height:calc(var(--spacing)*0)}#simplybook_app .max-h-48{max-height:calc(var(--spacing)*48)}#simplybook_app .max-h-\[36px\]{max-height:36px}#simplybook_app .max-h-\[48px\]{max-height:48px}#simplybook_app .min-h-\[75svh\]{min-height:75svh}#simplybook_app .min-h-full{min-height:100%}#simplybook_app .w-0{width:calc(var(--spacing)*0)}#simplybook_app .w-1{width:calc(var(--spacing)*1)}#simplybook_app .w-1\/2{width:50%}#simplybook_app .w-3{width:calc(var(--spacing)*3)}#simplybook_app .w-3\/4{width:75%}#simplybook_app .w-3\/8{width:37.5%}#simplybook_app .w-4{width:calc(var(--spacing)*4)}#simplybook_app .w-4\/5{width:80%}#simplybook_app .w-5{width:calc(var(--spacing)*5)}#simplybook_app .w-5\/6{width:83.3333%}#simplybook_app .w-6{width:calc(var(--spacing)*6)}#simplybook_app .w-8{width:calc(var(--spacing)*8)}#simplybook_app .w-10{width:calc(var(--spacing)*10)}#simplybook_app .w-20{width:calc(var(--spacing)*20)}#simplybook_app .w-40{width:calc(var(--spacing)*40)}#simplybook_app .w-65{width:calc(var(--spacing)*65)}#simplybook_app .w-\[18px\]{width:18px}#simplybook_app .w-\[48\%\]{width:48%}#simplybook_app .w-\[65vw\]{width:65vw}#simplybook_app .w-\[70\%\]{width:70%}#simplybook_app .w-\[75\%\]{width:75%}#simplybook_app .w-\[185px\]{width:185px}#simplybook_app .w-full{width:100%}#simplybook_app .w-min{width:min-content}#simplybook_app .max-w-2\/3{max-width:66.6667%}#simplybook_app .max-w-3\/5{max-width:60%}#simplybook_app .max-w-7xl{max-width:var(--container-7xl)}#simplybook_app .max-w-8xl{max-width:var(--container-8xl)}#simplybook_app .max-w-\[36px\]{max-width:36px}#simplybook_app .max-w-\[46rem\]{max-width:46rem}#simplybook_app .max-w-\[48px\]{max-width:48px}#simplybook_app .max-w-fit{max-width:fit-content}#simplybook_app .max-w-md{max-width:var(--container-md)}#simplybook_app .max-w-screen-2xl{max-width:var(--breakpoint-2xl)}#simplybook_app .max-w-screen-md{max-width:var(--breakpoint-md)}#simplybook_app .max-w-sm{max-width:var(--container-sm)}#simplybook_app .max-w-xs{max-width:var(--container-xs)}#simplybook_app .min-w-5{min-width:calc(var(--spacing)*5)}#simplybook_app .min-w-20{min-width:calc(var(--spacing)*20)}#simplybook_app .min-w-\[36px\]{min-width:36px}#simplybook_app .min-w-\[140px\]{min-width:140px}#simplybook_app .flex-1{flex:1}#simplybook_app .flex-shrink,#simplybook_app .shrink{flex-shrink:1}#simplybook_app .flex-grow,#simplybook_app .grow{flex-grow:1}#simplybook_app .border-collapse{border-collapse:collapse}#simplybook_app .-translate-y-1\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}#simplybook_app .rotate-180{rotate:180deg}#simplybook_app .transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}#simplybook_app .animate-pulse{animation:var(--animate-pulse)}#simplybook_app .animate-spin{animation:var(--animate-spin)}#simplybook_app .cursor-default{cursor:default}#simplybook_app .cursor-not-allowed{cursor:not-allowed}#simplybook_app .cursor-pointer{cursor:pointer}#simplybook_app .resize{resize:both}#simplybook_app .list-inside{list-style-position:inside}#simplybook_app .list-decimal{list-style-type:decimal}#simplybook_app .list-none{list-style-type:none}#simplybook_app .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#simplybook_app .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}#simplybook_app .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}#simplybook_app .grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}#simplybook_app .flex-col{flex-direction:column}#simplybook_app .flex-col-reverse{flex-direction:column-reverse}#simplybook_app .flex-row{flex-direction:row}#simplybook_app .flex-row-reverse{flex-direction:row-reverse}#simplybook_app .flex-wrap{flex-wrap:wrap}#simplybook_app .content-start{align-content:flex-start}#simplybook_app .items-baseline{align-items:baseline}#simplybook_app .items-center{align-items:center}#simplybook_app .items-start{align-items:flex-start}#simplybook_app .justify-around{justify-content:space-around}#simplybook_app .justify-between{justify-content:space-between}#simplybook_app .justify-center{justify-content:center}#simplybook_app .justify-end{justify-content:flex-end}#simplybook_app .justify-start{justify-content:flex-start}#simplybook_app .gap-1{gap:calc(var(--spacing)*1)}#simplybook_app .gap-2{gap:calc(var(--spacing)*2)}#simplybook_app .gap-3{gap:calc(var(--spacing)*3)}#simplybook_app .gap-3\.5{gap:calc(var(--spacing)*3.5)}#simplybook_app .gap-4{gap:calc(var(--spacing)*4)}#simplybook_app .gap-5{gap:calc(var(--spacing)*5)}#simplybook_app .gap-6{gap:calc(var(--spacing)*6)}#simplybook_app .gap-8{gap:calc(var(--spacing)*8)}#simplybook_app .gap-24{gap:calc(var(--spacing)*24)}:where(#simplybook_app .space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}:where(#simplybook_app .space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}#simplybook_app .gap-x-4{column-gap:calc(var(--spacing)*4)}:where(#simplybook_app .space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}:where(#simplybook_app .space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*3*var(--tw-space-x-reverse))}#simplybook_app .gap-y-4{row-gap:calc(var(--spacing)*4)}#simplybook_app .self-center{align-self:center}#simplybook_app .self-start{align-self:flex-start}#simplybook_app .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#simplybook_app .overflow-hidden{overflow:hidden}#simplybook_app .overflow-x-scroll{overflow-x:scroll}#simplybook_app .overflow-y-auto{overflow-y:auto}#simplybook_app .overflow-y-scroll{overflow-y:scroll}#simplybook_app .rounded{border-radius:.25rem}#simplybook_app .rounded-\[3rem\]{border-radius:3rem}#simplybook_app .rounded-full{border-radius:3.40282e+38px}#simplybook_app .rounded-lg{border-radius:var(--radius-lg)}#simplybook_app .rounded-md{border-radius:var(--radius-md)}#simplybook_app .rounded-sm{border-radius:var(--radius-sm)}#simplybook_app .rounded-xl{border-radius:var(--radius-xl)}#simplybook_app .rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}#simplybook_app .rounded-b-lg{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}#simplybook_app .rounded-b-md{border-bottom-left-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}#simplybook_app .rounded-b-none{border-bottom-left-radius:0;border-bottom-right-radius:0}#simplybook_app .border,#simplybook_app .border-1{border-style:var(--tw-border-style);border-width:1px}#simplybook_app .border-2{border-style:var(--tw-border-style);border-width:2px}#simplybook_app .border-3{border-style:var(--tw-border-style);border-width:3px}#simplybook_app .border-t{border-top-style:var(--tw-border-style);border-top-width:1px}#simplybook_app .border-b-1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}#simplybook_app .border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}#simplybook_app .border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}#simplybook_app .border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}#simplybook_app .\!border-sb-blue{border-color:var(--color-sb-blue)!important}#simplybook_app .\!border-secondary{border-color:#ff3259!important}#simplybook_app .border-\[\#E1E7F5\]{border-color:#e1e7f5}#simplybook_app .border-\[\#e6e6e6\]{border-color:#e6e6e6}#simplybook_app .border-black{border-color:var(--color-black)}#simplybook_app .border-blue-500{border-color:var(--color-blue-500)}#simplybook_app .border-blue-600{border-color:var(--color-blue-600)}#simplybook_app .border-gray-200{border-color:var(--color-gray-200)}#simplybook_app .border-gray-300{border-color:var(--color-gray-300)}#simplybook_app .border-gray-400{border-color:var(--color-gray-400)}#simplybook_app .border-green-600{border-color:var(--color-green-600)}#simplybook_app .border-inherit{border-color:inherit}#simplybook_app .border-primary{border-color:#06adef}#simplybook_app .border-primary-light{border-color:#b3e4f9}#simplybook_app .border-red-400{border-color:var(--color-red-400)}#simplybook_app .border-red-500{border-color:var(--color-red-500)}#simplybook_app .border-red-600{border-color:var(--color-red-600)}#simplybook_app .border-sb-blue{border-color:var(--color-sb-blue)}#simplybook_app .border-secondary{border-color:#ff3259}#simplybook_app .border-tertiary{border-color:#0c3052}#simplybook_app .border-tertiary-border{border-color:var(--color-tertiary-border)}#simplybook_app .border-transparent{border-color:#0000}#simplybook_app .border-b-\[\#E1E7F5\]{border-bottom-color:#e1e7f5}#simplybook_app .\!bg-transparent{background-color:#0000!important}#simplybook_app .bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}#simplybook_app .bg-blue-50{background-color:var(--color-blue-50)}#simplybook_app .bg-blue-100{background-color:var(--color-blue-100)}#simplybook_app .bg-blue-500{background-color:var(--color-blue-500)}#simplybook_app .bg-gray-50{background-color:var(--color-gray-50)}#simplybook_app .bg-gray-100{background-color:var(--color-gray-100)}#simplybook_app .bg-gray-200{background-color:var(--color-gray-200)}#simplybook_app .bg-gray-300{background-color:var(--color-gray-300)}#simplybook_app .bg-green-100{background-color:var(--color-green-100)}#simplybook_app .bg-green-500{background-color:var(--color-green-500)}#simplybook_app .bg-primary{background-color:#06adef}#simplybook_app .bg-primary-lighter{background-color:var(--color-primary-lighter)}#simplybook_app .bg-red-100{background-color:var(--color-red-100)}#simplybook_app .bg-red-600{background-color:var(--color-red-600)}#simplybook_app .bg-red-800{background-color:var(--color-red-800)}#simplybook_app .bg-secondary{background-color:#ff3259}#simplybook_app .bg-secondary-dark{background-color:#950c28}#simplybook_app .bg-slate-600{background-color:var(--color-slate-600)}#simplybook_app .bg-succes{background-color:var(--color-succes)}#simplybook_app .bg-succes-light{background-color:var(--color-succes-light)}#simplybook_app .bg-tertiary{background-color:#0c3052}#simplybook_app .bg-tertiary-dark{background-color:#061f32}#simplybook_app .bg-tertiary-light{background-color:#f0f4fe}#simplybook_app .bg-transparent{background-color:#0000}#simplybook_app .bg-white{background-color:var(--color-white)}#simplybook_app .bg-yellow-100{background-color:var(--color-yellow-100)}#simplybook_app .bg-yellow-400{background-color:var(--color-yellow-400)}#simplybook_app .bg-yellow-900{background-color:var(--color-yellow-900)}#simplybook_app .\!p-4{padding:calc(var(--spacing)*4)!important}#simplybook_app .p-0{padding:calc(var(--spacing)*0)}#simplybook_app .p-1{padding:calc(var(--spacing)*1)}#simplybook_app .p-1\.5{padding:calc(var(--spacing)*1.5)}#simplybook_app .p-2{padding:calc(var(--spacing)*2)}#simplybook_app .p-3{padding:calc(var(--spacing)*3)}#simplybook_app .p-4{padding:calc(var(--spacing)*4)}#simplybook_app .p-5{padding:calc(var(--spacing)*5)}#simplybook_app .p-6{padding:calc(var(--spacing)*6)}#simplybook_app .p-8{padding:calc(var(--spacing)*8)}#simplybook_app .px-0{padding-inline:calc(var(--spacing)*0)}#simplybook_app .px-1{padding-inline:calc(var(--spacing)*1)}#simplybook_app .px-2{padding-inline:calc(var(--spacing)*2)}#simplybook_app .px-3{padding-inline:calc(var(--spacing)*3)}#simplybook_app .px-4{padding-inline:calc(var(--spacing)*4)}#simplybook_app .px-5{padding-inline:calc(var(--spacing)*5)}#simplybook_app .px-6{padding-inline:calc(var(--spacing)*6)}#simplybook_app .px-8{padding-inline:calc(var(--spacing)*8)}#simplybook_app .py-0{padding-block:calc(var(--spacing)*0)}#simplybook_app .py-1{padding-block:calc(var(--spacing)*1)}#simplybook_app .py-2{padding-block:calc(var(--spacing)*2)}#simplybook_app .py-3{padding-block:calc(var(--spacing)*3)}#simplybook_app .py-4{padding-block:calc(var(--spacing)*4)}#simplybook_app .py-5{padding-block:calc(var(--spacing)*5)}#simplybook_app .py-6{padding-block:calc(var(--spacing)*6)}#simplybook_app .py-8{padding-block:calc(var(--spacing)*8)}#simplybook_app .py-10{padding-block:calc(var(--spacing)*10)}#simplybook_app .py-\[23px\]{padding-block:23px}#simplybook_app .pt-2{padding-top:calc(var(--spacing)*2)}#simplybook_app .pt-4{padding-top:calc(var(--spacing)*4)}#simplybook_app .pr-1{padding-right:calc(var(--spacing)*1)}#simplybook_app .pb-1{padding-bottom:calc(var(--spacing)*1)}#simplybook_app .pb-2{padding-bottom:calc(var(--spacing)*2)}#simplybook_app .pb-4{padding-bottom:calc(var(--spacing)*4)}#simplybook_app .pl-5{padding-left:calc(var(--spacing)*5)}#simplybook_app .text-center{text-align:center}#simplybook_app .text-justify{text-align:justify}#simplybook_app .text-left{text-align:left}#simplybook_app .text-right{text-align:right}#simplybook_app .text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}#simplybook_app .text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}#simplybook_app .text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}#simplybook_app .text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}#simplybook_app .text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}#simplybook_app .text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}#simplybook_app .text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}#simplybook_app .text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}#simplybook_app .text-\[0\.85rem\]{font-size:.85rem}#simplybook_app .text-\[0\.8125rem\]{font-size:.8125rem}#simplybook_app .text-label{font-size:var(--text-label)}#simplybook_app .text-xxs{font-size:var(--text-xxs)}#simplybook_app .leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}#simplybook_app .leading-none{--tw-leading:1;line-height:1}#simplybook_app .font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}#simplybook_app .font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}#simplybook_app .font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}#simplybook_app .font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}#simplybook_app .font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}#simplybook_app .font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}#simplybook_app .text-nowrap{text-wrap:nowrap}#simplybook_app .text-wrap{text-wrap:wrap}#simplybook_app .\!text-sb-blue{color:var(--color-sb-blue)!important}#simplybook_app .text-\[\#333333\],#simplybook_app .text-\[\#333\]{color:#333}#simplybook_app .text-black{color:#000c}#simplybook_app .text-blue-600{color:var(--color-blue-600)}#simplybook_app .text-gray-400{color:var(--color-gray-400)}#simplybook_app .text-gray-500{color:var(--color-gray-500)}#simplybook_app .text-gray-600{color:var(--color-gray-600)}#simplybook_app .text-gray-700{color:var(--color-gray-700)}#simplybook_app .text-gray-800{color:var(--color-gray-800)}#simplybook_app .text-gray-900{color:var(--color-gray-900)}#simplybook_app .text-green-500{color:var(--color-green-500)}#simplybook_app .text-green-600{color:var(--color-green-600)}#simplybook_app .text-primary{color:#06adef}#simplybook_app .text-red-500{color:var(--color-red-500)}#simplybook_app .text-red-600{color:var(--color-red-600)}#simplybook_app .text-red-700{color:var(--color-red-700)}#simplybook_app .text-sb-blue{color:var(--color-sb-blue)}#simplybook_app .text-sb-gray{color:var(--color-sb-gray)}#simplybook_app .text-succes{color:var(--color-succes)}#simplybook_app .text-tertiary{color:#0c3052}#simplybook_app .text-white{color:#ffffffd9}#simplybook_app .text-yellow-900{color:var(--color-yellow-900)}#simplybook_app .lowercase{text-transform:lowercase}#simplybook_app .uppercase{text-transform:uppercase}#simplybook_app .italic{font-style:italic}#simplybook_app .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}#simplybook_app .line-through{text-decoration-line:line-through}#simplybook_app .underline{text-decoration-line:underline}#simplybook_app .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#simplybook_app .opacity-50{opacity:.5}#simplybook_app .shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}#simplybook_app .shadow,#simplybook_app .shadow-lg{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}#simplybook_app .shadow-md{--tw-shadow:0px 9px 14px -2px var(--tw-shadow-color,#0000001a)}#simplybook_app .shadow-md,#simplybook_app .shadow-none{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .shadow-none{--tw-shadow:0 0 #0000}#simplybook_app .shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}#simplybook_app .ring,#simplybook_app .shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)}#simplybook_app .ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .ring-red-600{--tw-ring-color:var(--color-red-600)}#simplybook_app .outline{outline-style:var(--tw-outline-style);outline-width:1px}#simplybook_app .blur{--tw-blur:blur(8px)}#simplybook_app .blur,#simplybook_app .blur-sm{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}#simplybook_app .blur-sm{--tw-blur:blur(var(--blur-sm))}#simplybook_app .grayscale{--tw-grayscale:grayscale(100%)}#simplybook_app .filter,#simplybook_app .grayscale{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}#simplybook_app .transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-\[border-color\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .duration-100{--tw-duration:.1s;transition-duration:.1s}#simplybook_app .duration-200{--tw-duration:.2s;transition-duration:.2s}#simplybook_app .duration-300{--tw-duration:.3s;transition-duration:.3s}#simplybook_app .ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}#simplybook_app .ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}#simplybook_app .aspect-h-9{--tw-aspect-h:9}#simplybook_app .peer-checked\:bg-blue-600:is(:where(.peer):checked~*){background-color:var(--color-blue-600)}#simplybook_app .peer-focus\:ring-2:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .peer-focus\:ring-4:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .peer-focus\:ring-blue-300:is(:where(.peer):focus~*){--tw-ring-color:var(--color-blue-300)}#simplybook_app .after\:absolute:after{content:var(--tw-content);position:absolute}#simplybook_app .after\:top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*.5)}#simplybook_app .after\:top-1:after{content:var(--tw-content);top:calc(var(--spacing)*1)}#simplybook_app .after\:left-0\.5:after{content:var(--tw-content);left:calc(var(--spacing)*.5)}#simplybook_app .after\:mx-\[0\.2rem\]:after{content:var(--tw-content);margin-inline:.2rem}#simplybook_app .after\:aspect-square:after{aspect-ratio:1;content:var(--tw-content)}#simplybook_app .after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing)*3)}#simplybook_app .after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing)*4)}#simplybook_app .after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing)*3)}#simplybook_app .after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing)*4)}#simplybook_app .after\:rounded-full:after{border-radius:3.40282e+38px;content:var(--tw-content)}#simplybook_app .after\:border:after{border-style:var(--tw-border-style);border-width:1px;content:var(--tw-content)}#simplybook_app .after\:border-gray-200:after{border-color:var(--color-gray-200);content:var(--tw-content)}#simplybook_app .after\:bg-white:after{background-color:var(--color-white);content:var(--tw-content)}#simplybook_app .after\:transition-all:after{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}#simplybook_app .peer-checked\:after\:translate-x-\[0\.8rem\]:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:.8rem;translate:var(--tw-translate-x)var(--tw-translate-y)}#simplybook_app .peer-checked\:after\:translate-x-\[1\.125rem\]:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:1.125rem;translate:var(--tw-translate-x)var(--tw-translate-y)}#simplybook_app .peer-checked\:after\:border-white:is(:where(.peer):checked~*):after{border-color:var(--color-white);content:var(--tw-content)}#simplybook_app .last\:mb-3:last-child{margin-bottom:calc(var(--spacing)*3)}#simplybook_app .odd\:bg-white:nth-child(odd){background-color:var(--color-white)}#simplybook_app .even\:bg-gray-50:nth-child(2n){background-color:var(--color-gray-50)}@media (hover:hover){#simplybook_app .hover\:border-blue-500:hover{border-color:var(--color-blue-500)}#simplybook_app .hover\:border-gray-500:hover{border-color:var(--color-gray-500)}#simplybook_app .hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}#simplybook_app .hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}#simplybook_app .hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}#simplybook_app .hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}#simplybook_app .hover\:bg-primary-dark:hover{background-color:#055b78}#simplybook_app .hover\:bg-primary-lighter:hover{background-color:var(--color-primary-lighter)}#simplybook_app .hover\:bg-red-100:hover{background-color:var(--color-red-100)}#simplybook_app .hover\:bg-secondary-dark:hover{background-color:#950c28}#simplybook_app .hover\:bg-tertiary:hover{background-color:#0c3052}#simplybook_app .hover\:bg-tertiary-dark:hover{background-color:#061f32}#simplybook_app .hover\:bg-tertiary-light:hover{background-color:#f0f4fe}#simplybook_app .hover\:text-blue-800:hover{color:var(--color-blue-800)}#simplybook_app .hover\:text-gray-600:hover{color:var(--color-gray-600)}#simplybook_app .hover\:text-primary:hover{color:#06adef}#simplybook_app .hover\:text-red-600:hover{color:var(--color-red-600)}#simplybook_app .hover\:text-tertiary:hover{color:#0c3052}#simplybook_app .hover\:text-tertiary\/80:hover{color:oklab(30.3585% -.0243458 -.0693881/.8)}#simplybook_app .hover\:text-white:hover{color:#ffffffd9}#simplybook_app .hover\:underline:hover{text-decoration-line:underline}}#simplybook_app .focus\:border-tertiary:focus{border-color:#0c3052}#simplybook_app .focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)}#simplybook_app .focus\:ring-2:focus,#simplybook_app .focus\:ring-4:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)}#simplybook_app .focus\:ring-blue-300:focus{--tw-ring-color:var(--color-blue-300)}#simplybook_app .focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}#simplybook_app .focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){#simplybook_app .focus\:outline-hidden:focus{outline:2px solid #0000;outline-offset:2px}}#simplybook_app .active\:ring-4:active{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .active\:ring-blue-300:active{--tw-ring-color:var(--color-blue-300)}#simplybook_app .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}#simplybook_app .disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){#simplybook_app .sm\:col-span-6{grid-column:span 6/span 6}#simplybook_app .sm\:col-span-12{grid-column:span 12/span 12}#simplybook_app .sm\:flex{display:flex}#simplybook_app .sm\:max-w-1\/2{max-width:50%}#simplybook_app .sm\:max-w-\[80\%\]{max-width:80%}#simplybook_app .sm\:text-start{text-align:start}}@media (width>=48rem){#simplybook_app .md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}#simplybook_app .md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){#simplybook_app .lg\:col-span-3{grid-column:span 3/span 3}#simplybook_app .lg\:col-span-6{grid-column:span 6/span 6}#simplybook_app .lg\:w-auto{width:auto}#simplybook_app .lg\:max-w-\[70\%\]{max-width:70%}#simplybook_app .lg\:gap-y-4{row-gap:calc(var(--spacing)*4)}}@media (width>=80rem){#simplybook_app .xl\:order-0{order:0}#simplybook_app .xl\:col-span-3{grid-column:span 3/span 3}#simplybook_app .xl\:col-span-4{grid-column:span 4/span 4}#simplybook_app .xl\:col-span-5{grid-column:span 5/span 5}#simplybook_app .xl\:col-span-6{grid-column:span 6/span 6}#simplybook_app .xl\:col-start-2{grid-column-start:2}#simplybook_app .xl\:block{display:block}#simplybook_app .xl\:flex{display:flex}#simplybook_app .xl\:grid{display:grid}#simplybook_app .xl\:h-auto{height:auto}#simplybook_app .xl\:w-\[130px\]{width:130px}#simplybook_app .xl\:w-auto{width:auto}#simplybook_app .xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}#simplybook_app .xl\:grid-cols-\[130px_1fr_auto_2em\]{grid-template-columns:130px 1fr auto 2em}#simplybook_app .xl\:flex-wrap{flex-wrap:wrap}#simplybook_app .xl\:items-center{align-items:center}#simplybook_app .xl\:justify-between{justify-content:space-between}#simplybook_app .xl\:justify-center{justify-content:center}#simplybook_app .xl\:justify-normal{justify-content:normal}#simplybook_app .xl\:gap-6{gap:calc(var(--spacing)*6)}#simplybook_app .xl\:gap-24{gap:calc(var(--spacing)*24)}#simplybook_app .xl\:rounded-sm{border-radius:var(--radius-sm)}#simplybook_app .xl\:p-0{padding:calc(var(--spacing)*0)}#simplybook_app .xl\:px-1{padding-inline:calc(var(--spacing)*1)}#simplybook_app .xl\:px-4{padding-inline:calc(var(--spacing)*4)}#simplybook_app .xl\:py-0{padding-block:calc(var(--spacing)*0)}#simplybook_app .xl\:py-1{padding-block:calc(var(--spacing)*1)}#simplybook_app .xl\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}#simplybook_app .xl\:pt-0{padding-top:calc(var(--spacing)*0)}#simplybook_app .xl\:text-center{text-align:center}}#simplybook_app .\[\&\.active\]\:border-tertiary.active{border-color:#0c3052}#simplybook_app .\[\&\.active\]\:font-semibold.active{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}#simplybook_app .\[\&\.active\]\:text-primary.active{color:#06adef}:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74d3c;--toastify-color-transparent:#ffffffb3;--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-container-width:fit-content;--toastify-toast-width:320px;--toastify-toast-offset:16px;--toastify-toast-top:max(var(--toastify-toast-offset),env(safe-area-inset-top));--toastify-toast-right:max(var(--toastify-toast-offset),env(safe-area-inset-right));--toastify-toast-left:max(var(--toastify-toast-offset),env(safe-area-inset-left));--toastify-toast-bottom:max(var(--toastify-toast-offset),env(safe-area-inset-bottom));--toastify-toast-background:#fff;--toastify-toast-padding:14px;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-toast-bd-radius:6px;--toastify-toast-shadow:0px 4px 12px #0000001a;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-bgo:.2}.Toastify__toast-container{box-sizing:border-box;color:#fff;display:flex;flex-direction:column;position:fixed;-webkit-transform:translateZ(var(--toastify-z-index));width:var(--toastify-container-width);z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:var(--toastify-toast-left);top:var(--toastify-toast-top)}.Toastify__toast-container--top-center{align-items:center;left:50%;top:var(--toastify-toast-top);transform:translate(-50%)}.Toastify__toast-container--top-right{align-items:end;right:var(--toastify-toast-right);top:var(--toastify-toast-top)}.Toastify__toast-container--bottom-left{bottom:var(--toastify-toast-bottom);left:var(--toastify-toast-left)}.Toastify__toast-container--bottom-center{align-items:center;bottom:var(--toastify-toast-bottom);left:50%;transform:translate(-50%)}.Toastify__toast-container--bottom-right{align-items:end;bottom:var(--toastify-toast-bottom);right:var(--toastify-toast-right)}.Toastify__toast{--y:0;align-items:center;border-radius:var(--toastify-toast-bd-radius);box-shadow:var(--toastify-toast-shadow);box-sizing:border-box;display:flex;flex:auto;font-family:var(--toastify-font-family);margin-bottom:1rem;max-height:var(--toastify-toast-max-height);min-height:var(--toastify-toast-min-height);padding:var(--toastify-toast-padding);position:relative;touch-action:none;width:var(--toastify-toast-width);word-break:break-word;z-index:0}@media only screen and (width<=480px){.Toastify__toast-container{left:env(safe-area-inset-left);margin:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:env(safe-area-inset-top);transform:translate(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:env(safe-area-inset-bottom);transform:translate(0)}.Toastify__toast-container--rtl{left:auto;right:env(safe-area-inset-right)}.Toastify__toast{--toastify-toast-width:100%;border-radius:0;margin-bottom:0}}.Toastify__toast-container[data-stacked=true]{width:var(--toastify-toast-width)}.Toastify__toast--stacked{position:absolute;transform:translate3d(0,var(--y),0)scale(var(--s));transition:transform .3s;width:100%}.Toastify__toast--stacked[data-collapsed] .Toastify__close-button,.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body{transition:opacity .1s}.Toastify__toast--stacked[data-collapsed=false]{overflow:visible}.Toastify__toast--stacked[data-collapsed=true]:not(:last-child)>*{opacity:0}.Toastify__toast--stacked:after{bottom:100%;content:"";height:calc(var(--g)*1px);left:0;position:absolute;right:0}.Toastify__toast--stacked[data-pos=top]{top:0}.Toastify__toast--stacked[data-pos=bot]{bottom:0}.Toastify__toast--stacked[data-pos=bot].Toastify__toast--stacked:before{transform-origin:top}.Toastify__toast--stacked[data-pos=top].Toastify__toast--stacked:before{transform-origin:bottom}.Toastify__toast--stacked:before{bottom:0;content:"";height:100%;left:0;position:absolute;right:0;transform:scaleY(3);z-index:-1}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-icon{display:flex;flex-shrink:0;margin-inline-end:10px;width:22px}.Toastify--animate{animation-duration:.5s;animation-fill-mode:both}.Toastify--animate-icon{animation-duration:.3s;animation-fill-mode:both}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:var(--toastify-color-info);color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:var(--toastify-color-success);color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:var(--toastify-color-warning);color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:var(--toastify-color-error);color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{background:0 0;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;position:absolute;right:6px;top:6px;transition:all .3s;z-index:1}.Toastify__toast--rtl .Toastify__close-button{left:6px;right:unset}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:100%;left:0;opacity:.7;position:absolute;transform-origin:0;width:100%;z-index:1}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{border-bottom-left-radius:0;left:auto;right:0;transform-origin:100%}.Toastify__progress-bar--wrp{border-bottom-left-radius:var(--toastify-toast-bd-radius);border-bottom-right-radius:var(--toastify-toast-bd-radius);bottom:0;height:5px;left:0;overflow:hidden;position:absolute;width:100%}.Toastify__progress-bar--wrp[data-hidden=true]{opacity:0}.Toastify__progress-bar--bg{height:100%;opacity:var(--toastify-color-progress-bgo);width:100%}.Toastify__spinner{animation:Toastify__spin .65s linear infinite;border:2px solid;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate(3000px)}60%{opacity:1;transform:translate(-25px)}75%{transform:translate(10px)}90%{transform:translate(-5px)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,var(--y),0)}to{opacity:0;transform:translate3d(2000px,var(--y),0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate(-3000px)}60%{opacity:1;transform:translate(25px)}75%{transform:translate(-10px)}90%{transform:translate(5px)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,var(--y),0)}to{opacity:0;transform:translate3d(-2000px,var(--y),0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translateY(3000px)}60%{opacity:1;transform:translateY(-20px)}75%{transform:translateY(10px)}90%{transform:translateY(-5px)}to{transform:translate(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translateY(-2000px)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translateY(-3000px)}60%{opacity:1;transform:translateY(25px)}75%{transform:translateY(-10px)}90%{transform:translateY(5px)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translateY(2000px)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:translate3d(0,var(--y),0)scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px)rotateX(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px)rotateX(-20deg)}60%{opacity:1;transform:perspective(400px)rotateX(10deg)}80%{transform:perspective(400px)rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:translate3d(0,var(--y),0)perspective(400px)}30%{opacity:1;transform:translate3d(0,var(--y),0)perspective(400px)rotateX(-20deg)}to{opacity:0;transform:translate3d(0,var(--y),0)perspective(400px)rotateX(90deg)}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate(110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInLeft{0%{transform:translate(-110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInUp{0%{transform:translateY(110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInDown{0%{transform:translateY(-110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideOutRight{0%{transform:translate3d(0,var(--y),0)}to{transform:translate3d(110%,var(--y),0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{transform:translate3d(0,var(--y),0)}to{transform:translate3d(-110%,var(--y),0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{transform:translate3d(0,var(--y),0)}to{transform:translateY(500px);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{transform:translate3d(0,var(--y),0)}to{transform:translateY(-500px);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{animation-duration:.3s;animation-name:Toastify__slideOutLeft;animation-timing-function:ease-in}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{animation-duration:.3s;animation-name:Toastify__slideOutRight;animation-timing-function:ease-in}.Toastify__slide-exit--top-center{animation-duration:.3s;animation-name:Toastify__slideOutUp;animation-timing-function:ease-in}.Toastify__slide-exit--bottom-center{animation-duration:.3s;animation-name:Toastify__slideOutDown;animation-timing-function:ease-in}@keyframes Toastify__spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:root{--rt-color-white:#fff;--rt-color-dark:#222;--rt-color-success:#8dc572;--rt-color-error:#be6464;--rt-color-warning:#f0ad4e;--rt-color-info:#337ab7;--rt-opacity:.9;--rt-transition-show-delay:.15s;--rt-transition-closing-delay:.15s}.core-styles-module_tooltip__3vRRp{left:0;opacity:0;pointer-events:none;position:absolute;top:0;will-change:opacity}.core-styles-module_fixed__pcSol{position:fixed}.core-styles-module_arrow__cvMwQ{background:inherit;position:absolute}.core-styles-module_noArrow__xock6{display:none}.core-styles-module_clickable__ZuTTB{pointer-events:auto}.core-styles-module_show__Nt9eE{opacity:var(--rt-opacity);transition:opacity var(--rt-transition-show-delay)ease-out}.core-styles-module_closing__sGnxF{opacity:0;transition:opacity var(--rt-transition-closing-delay)ease-in}.styles-module_tooltip__mnnfp{border-radius:3px;font-size:90%;padding:8px 16px;width:max-content}.styles-module_arrow__K0L3T{height:8px;width:8px}[class*=react-tooltip__place-top]>.styles-module_arrow__K0L3T{transform:rotate(45deg)}[class*=react-tooltip__place-right]>.styles-module_arrow__K0L3T{transform:rotate(135deg)}[class*=react-tooltip__place-bottom]>.styles-module_arrow__K0L3T{transform:rotate(225deg)}[class*=react-tooltip__place-left]>.styles-module_arrow__K0L3T{transform:rotate(315deg)}.styles-module_dark__xNqje{background:var(--rt-color-dark);color:var(--rt-color-white)}.styles-module_light__Z6W-X{background-color:var(--rt-color-white);color:var(--rt-color-dark)}.styles-module_success__A2AKt{background-color:var(--rt-color-success);color:var(--rt-color-white)}.styles-module_warning__SCK0X{background-color:var(--rt-color-warning);color:var(--rt-color-white)}.styles-module_error__JvumD{background-color:var(--rt-color-error);color:var(--rt-color-white)}.styles-module_info__BWdHW{background-color:var(--rt-color-info);color:var(--rt-color-white)}:root{--toastify-toast-min-height:3rem}#wpcontent{padding-left:0!important}#adminmenu .wp-menu-image img{display:initial}:is(input,select,textarea,button,.checkbox-field,.radio-field,.notification-box,a):focus{outline:2px solid var(--color-primary-hover)}small{font-size:var(--text-base)}h1,h2,h3,h4,h5 h6{margin:0}h1{font-size:var(--text-3xl)}h2{font-size:var(--text-2xl)}h3{font-size:var(--text-xl)}.max-w-container{width:2000px}.onboarding-body{height:100%;margin:1svh auto}.form-field-inline{width:48.5%}.theme-config{width:100%}.theme-config-group-color{column-gap:1rem;display:grid;flex-wrap:wrap;grid-template-columns:repeat(2,minmax(0,1fr));justify-content:space-between;margin:1.5rem auto}@media screen and (width<=40rem){.theme-config-group-color{grid-template-columns:repeat(1,minmax(0,1fr))}}.theme-config-group-color>.theme-config-field{grid-column:span 1;width:100%}#field-tooltip{background:color-mix(in oklab,var(--color-neutral-800)60%,transparent);font-size:var(--text-xs);font-weight:400;max-width:300px;z-index:99999}#simplybook_app label{font-size:var(--text-label);font-weight:var(--font-weight-medium);margin-bottom:.5rem}#simplybook_app .input-base{box-shadow:var(--shadow-md)}#simplybook_app .input-base,#simplybook_app .input-base-no-shadow{border-color:var(--color-gray-200);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:2px;font-size:var(--text-base);line-height:1.5;max-width:100%;padding:.5rem;position:relative;width:100%}#simplybook_app .checkbox-field{border:2px solid #0000}#simplybook_app img{display:inline}.scroll-container::-webkit-scrollbar{background-color:var(--color-gray-300);border-radius:10px;width:8px}.scroll-container::-webkit-scrollbar-thumb{background-color:var(--color-gray-500);border-radius:10px}.scroll-container::-webkit-scrollbar-track{background-color:#0000;border-radius:10px;-webkit-box-shadow:inset 0 0 2px #0000}.invalid-field-regex input,.invalid-field-required .checkbox-field,.invalid-field-required input,.invalid-field-required select{border-color:var(--color-error)!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}1 /*! tailwindcss v4.0.14 | MIT License | https://tailwindcss.com */@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(.936 .032 17.717);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-500:oklch(.795 .184 86.047);--color-yellow-900:oklch(.421 .095 57.708);--color-green-100:oklch(.962 .044 156.743);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-300:oklch(.809 .105 251.813);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-800:oklch(.424 .199 265.638);--color-slate-600:oklch(.446 .043 257.281);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:#dadada80;--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-neutral-200:oklch(.922 0 0);--color-neutral-800:oklch(.269 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-md:48rem;--breakpoint-2xl:clamp(300px,100% - 20px*2,1600px);--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:.875rem;--text-base--line-height:1.5;--text-lg:1rem;--text-lg--line-height:1.55556;--text-xl:1.125rem;--text-xl--line-height:1.4;--text-2xl:1.375rem;--text-2xl--line-height:1.33333;--text-3xl:1.5rem;--text-3xl--line-height:1.2;--text-4xl:2rem;--text-4xl--line-height:1.11111;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:600;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--shadow-md:0px 9px 14px -2px #0000001a;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings);--text-xxs:.6825rem;--text-label:var(--text-base);--color-succes:var(--color-green-500);--color-succes-light:#eafaf3;--color-warning:var(--color-yellow-400);--color-error:var(--color-red-400);--bg-primary-light:#b3e4f9;--bg-primary:#06adef;--bg-primary-dark:#055b78;--color-primary-hover:#0589bd;--color-primary-lighter:#f8fcfe;--bg-secondary-light:#ffb3c1;--bg-secondary:#ff3259;--bg-secondary-dark:#950c28;--bg-tertiary-light:#d9e3fd;--bg-tertiary:#0c3052;--bg-tertiary-dark:#061f32;--color-sb-blue:#5a6fa5;--color-sb-gray:#788291;--color-accent-light-blue:#009fff;--color-tertiary-border:#eff4ff;--container-8xl:125rem}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}::file-selector-button{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{color:color-mix(in oklab,currentColor 50%,transparent);opacity:1}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components,utilities;#simplybook_app .\@container{container-type:inline-size}#simplybook_app .pointer-events-none{pointer-events:none}#simplybook_app .collapse{visibility:collapse}#simplybook_app .invisible{visibility:hidden}#simplybook_app .visible{visibility:visible}#simplybook_app .aspect-w-16{padding-bottom:calc(var(--tw-aspect-h)/var(--tw-aspect-w)*100%);--tw-aspect-w:16;position:relative}#simplybook_app .aspect-w-16>*{height:100%;inset:0;position:absolute;width:100%}#simplybook_app .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}#simplybook_app .absolute{position:absolute}#simplybook_app .fixed{position:fixed}#simplybook_app .relative{position:relative}#simplybook_app .static{position:static}#simplybook_app .sticky{position:sticky}#simplybook_app .inset-0{inset:calc(var(--spacing)*0)}#simplybook_app .start-0{inset-inline-start:calc(var(--spacing)*0)}#simplybook_app .-top-3{top:calc(var(--spacing)*-3)}#simplybook_app .top-0{top:calc(var(--spacing)*0)}#simplybook_app .top-2\.5{top:calc(var(--spacing)*2.5)}#simplybook_app .top-5\.5{top:calc(var(--spacing)*5.5)}#simplybook_app .top-16{top:calc(var(--spacing)*16)}#simplybook_app .-right-0\.5{right:calc(var(--spacing)*-.5)}#simplybook_app .-right-5{right:calc(var(--spacing)*-5)}#simplybook_app .right-\[0\.5rem\]{right:.5rem}#simplybook_app .bottom-0{bottom:calc(var(--spacing)*0)}#simplybook_app .isolate{isolation:isolate}#simplybook_app .-z-1{z-index:-1}#simplybook_app .z-10{z-index:10}#simplybook_app .z-50{z-index:50}#simplybook_app .z-60{z-index:60}#simplybook_app .z-999{z-index:999}#simplybook_app .z-99999{z-index:99999}#simplybook_app .order-6{order:6}#simplybook_app .col-span-3{grid-column:span 3/span 3}#simplybook_app .col-span-4{grid-column:span 4/span 4}#simplybook_app .col-span-5{grid-column:span 5/span 5}#simplybook_app .col-span-6{grid-column:span 6/span 6}#simplybook_app .col-span-12{grid-column:span 12/span 12}#simplybook_app .col-span-full{grid-column:1/-1}#simplybook_app .col-start-2{grid-column-start:2}#simplybook_app .col-start-3{grid-column-start:3}#simplybook_app .col-start-7{grid-column-start:7}#simplybook_app .row-span-1{grid-row:span 1/span 1}#simplybook_app .row-span-2{grid-row:span 2/span 2}#simplybook_app .float-left{float:left}#simplybook_app .float-right{float:right}@media (width>=40rem){#simplybook_app .container{max-width:40rem}}@media (width>=48rem){#simplybook_app .container{max-width:48rem}}@media (width>=64rem){#simplybook_app .container{max-width:64rem}}@media (width>=80rem){#simplybook_app .container{max-width:80rem}}#simplybook_app .m-0{margin:calc(var(--spacing)*0)}#simplybook_app .m-4{margin:calc(var(--spacing)*4)}#simplybook_app .m-5{margin:calc(var(--spacing)*5)}#simplybook_app .mx-2{margin-inline:calc(var(--spacing)*2)}#simplybook_app .mx-4{margin-inline:calc(var(--spacing)*4)}#simplybook_app .mx-5{margin-inline:calc(var(--spacing)*5)}#simplybook_app .mx-auto{margin-inline:auto}#simplybook_app .my-2{margin-block:calc(var(--spacing)*2)}#simplybook_app .my-4{margin-block:calc(var(--spacing)*4)}#simplybook_app .my-6{margin-block:calc(var(--spacing)*6)}#simplybook_app .my-10{margin-block:calc(var(--spacing)*10)}#simplybook_app .my-12{margin-block:calc(var(--spacing)*12)}#simplybook_app .-mt-4{margin-top:calc(var(--spacing)*-4)}#simplybook_app .-mt-20{margin-top:calc(var(--spacing)*-20)}#simplybook_app .mt-1{margin-top:calc(var(--spacing)*1)}#simplybook_app .mt-2{margin-top:calc(var(--spacing)*2)}#simplybook_app .mt-3{margin-top:calc(var(--spacing)*3)}#simplybook_app .mt-4{margin-top:calc(var(--spacing)*4)}#simplybook_app .mt-5{margin-top:calc(var(--spacing)*5)}#simplybook_app .mt-8{margin-top:calc(var(--spacing)*8)}#simplybook_app .mt-12{margin-top:calc(var(--spacing)*12)}#simplybook_app .mt-26{margin-top:calc(var(--spacing)*26)}#simplybook_app .mt-\[1px\]{margin-top:1px}#simplybook_app .\!mr-0{margin-right:calc(var(--spacing)*0)!important}#simplybook_app .mr-2{margin-right:calc(var(--spacing)*2)}#simplybook_app .mr-3{margin-right:calc(var(--spacing)*3)}#simplybook_app .mr-4{margin-right:calc(var(--spacing)*4)}#simplybook_app .mr-8{margin-right:calc(var(--spacing)*8)}#simplybook_app .mb-0{margin-bottom:calc(var(--spacing)*0)}#simplybook_app .mb-1{margin-bottom:calc(var(--spacing)*1)}#simplybook_app .mb-2{margin-bottom:calc(var(--spacing)*2)}#simplybook_app .mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}#simplybook_app .mb-3{margin-bottom:calc(var(--spacing)*3)}#simplybook_app .mb-4{margin-bottom:calc(var(--spacing)*4)}#simplybook_app .mb-5{margin-bottom:calc(var(--spacing)*5)}#simplybook_app .mb-6{margin-bottom:calc(var(--spacing)*6)}#simplybook_app .mb-8{margin-bottom:calc(var(--spacing)*8)}#simplybook_app .mb-12{margin-bottom:calc(var(--spacing)*12)}#simplybook_app .mb-\[0\.70rem\]{margin-bottom:.7rem}#simplybook_app .ml-1{margin-left:calc(var(--spacing)*1)}#simplybook_app .ml-2{margin-left:calc(var(--spacing)*2)}#simplybook_app .ml-4{margin-left:calc(var(--spacing)*4)}#simplybook_app .ml-\[1px\]{margin-left:1px}#simplybook_app .ml-auto{margin-left:auto}#simplybook_app .block{display:block}#simplybook_app .contents{display:contents}#simplybook_app .flex{display:flex}#simplybook_app .grid{display:grid}#simplybook_app .hidden{display:none}#simplybook_app .inline{display:inline}#simplybook_app .inline-block{display:inline-block}#simplybook_app .inline-flex{display:inline-flex}#simplybook_app .list-item{display:list-item}#simplybook_app .table{display:table}#simplybook_app .table-caption{display:table-caption}#simplybook_app .table-cell{display:table-cell}#simplybook_app .table-column{display:table-column}#simplybook_app .table-column-group{display:table-column-group}#simplybook_app .table-footer-group{display:table-footer-group}#simplybook_app .table-header-group{display:table-header-group}#simplybook_app .table-row{display:table-row}#simplybook_app .table-row-group{display:table-row-group}#simplybook_app .size-1{width:calc(var(--spacing)*1)}#simplybook_app .h-1,#simplybook_app .size-1{height:calc(var(--spacing)*1)}#simplybook_app .h-3{height:calc(var(--spacing)*3)}#simplybook_app .h-4{height:calc(var(--spacing)*4)}#simplybook_app .h-5{height:calc(var(--spacing)*5)}#simplybook_app .h-6{height:calc(var(--spacing)*6)}#simplybook_app .h-8{height:calc(var(--spacing)*8)}#simplybook_app .h-10{height:calc(var(--spacing)*10)}#simplybook_app .h-12{height:calc(var(--spacing)*12)}#simplybook_app .h-20{height:calc(var(--spacing)*20)}#simplybook_app .h-40{height:calc(var(--spacing)*40)}#simplybook_app .h-\[18px\]{height:18px}#simplybook_app .h-\[70vh\]{height:70vh}#simplybook_app .h-\[290px\]{height:290px}#simplybook_app .h-auto{height:auto}#simplybook_app .h-full{height:100%}#simplybook_app .h-max{height:max-content}#simplybook_app .max-h-0{max-height:calc(var(--spacing)*0)}#simplybook_app .max-h-48{max-height:calc(var(--spacing)*48)}#simplybook_app .max-h-\[36px\]{max-height:36px}#simplybook_app .max-h-\[48px\]{max-height:48px}#simplybook_app .min-h-\[75svh\]{min-height:75svh}#simplybook_app .min-h-full{min-height:100%}#simplybook_app .w-0{width:calc(var(--spacing)*0)}#simplybook_app .w-1{width:calc(var(--spacing)*1)}#simplybook_app .w-1\/2{width:50%}#simplybook_app .w-3{width:calc(var(--spacing)*3)}#simplybook_app .w-3\/4{width:75%}#simplybook_app .w-3\/8{width:37.5%}#simplybook_app .w-4{width:calc(var(--spacing)*4)}#simplybook_app .w-4\/5{width:80%}#simplybook_app .w-5{width:calc(var(--spacing)*5)}#simplybook_app .w-5\/6{width:83.3333%}#simplybook_app .w-6{width:calc(var(--spacing)*6)}#simplybook_app .w-8{width:calc(var(--spacing)*8)}#simplybook_app .w-10{width:calc(var(--spacing)*10)}#simplybook_app .w-20{width:calc(var(--spacing)*20)}#simplybook_app .w-40{width:calc(var(--spacing)*40)}#simplybook_app .w-65{width:calc(var(--spacing)*65)}#simplybook_app .w-\[18px\]{width:18px}#simplybook_app .w-\[65vw\]{width:65vw}#simplybook_app .w-\[75\%\]{width:75%}#simplybook_app .w-\[80\%\]{width:80%}#simplybook_app .w-\[185px\]{width:185px}#simplybook_app .w-full{width:100%}#simplybook_app .w-min{width:min-content}#simplybook_app .max-w-2\/3{max-width:66.6667%}#simplybook_app .max-w-3\/5{max-width:60%}#simplybook_app .max-w-7xl{max-width:var(--container-7xl)}#simplybook_app .max-w-8xl{max-width:var(--container-8xl)}#simplybook_app .max-w-\[36px\]{max-width:36px}#simplybook_app .max-w-\[46rem\]{max-width:46rem}#simplybook_app .max-w-\[48px\]{max-width:48px}#simplybook_app .max-w-fit{max-width:fit-content}#simplybook_app .max-w-md{max-width:var(--container-md)}#simplybook_app .max-w-screen-2xl{max-width:var(--breakpoint-2xl)}#simplybook_app .max-w-screen-md{max-width:var(--breakpoint-md)}#simplybook_app .max-w-sm{max-width:var(--container-sm)}#simplybook_app .max-w-xs{max-width:var(--container-xs)}#simplybook_app .min-w-0{min-width:calc(var(--spacing)*0)}#simplybook_app .min-w-5{min-width:calc(var(--spacing)*5)}#simplybook_app .min-w-20{min-width:calc(var(--spacing)*20)}#simplybook_app .min-w-\[36px\]{min-width:36px}#simplybook_app .min-w-\[140px\]{min-width:140px}#simplybook_app .flex-1{flex:1}#simplybook_app .flex-shrink,#simplybook_app .shrink{flex-shrink:1}#simplybook_app .flex-grow,#simplybook_app .grow{flex-grow:1}#simplybook_app .border-collapse{border-collapse:collapse}#simplybook_app .-translate-y-1\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}#simplybook_app .rotate-180{rotate:180deg}#simplybook_app .transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}#simplybook_app .animate-pulse{animation:var(--animate-pulse)}#simplybook_app .animate-spin{animation:var(--animate-spin)}#simplybook_app .cursor-default{cursor:default}#simplybook_app .cursor-not-allowed{cursor:not-allowed}#simplybook_app .cursor-pointer{cursor:pointer}#simplybook_app .resize{resize:both}#simplybook_app .list-inside{list-style-position:inside}#simplybook_app .list-decimal{list-style-type:decimal}#simplybook_app .list-none{list-style-type:none}#simplybook_app .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}#simplybook_app .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}#simplybook_app .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}#simplybook_app .grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}#simplybook_app .flex-col{flex-direction:column}#simplybook_app .flex-col-reverse{flex-direction:column-reverse}#simplybook_app .flex-row{flex-direction:row}#simplybook_app .flex-row-reverse{flex-direction:row-reverse}#simplybook_app .flex-wrap{flex-wrap:wrap}#simplybook_app .content-start{align-content:flex-start}#simplybook_app .items-baseline{align-items:baseline}#simplybook_app .items-center{align-items:center}#simplybook_app .items-start{align-items:flex-start}#simplybook_app .justify-around{justify-content:space-around}#simplybook_app .justify-between{justify-content:space-between}#simplybook_app .justify-center{justify-content:center}#simplybook_app .justify-end{justify-content:flex-end}#simplybook_app .justify-start{justify-content:flex-start}#simplybook_app .gap-1{gap:calc(var(--spacing)*1)}#simplybook_app .gap-2{gap:calc(var(--spacing)*2)}#simplybook_app .gap-3{gap:calc(var(--spacing)*3)}#simplybook_app .gap-3\.5{gap:calc(var(--spacing)*3.5)}#simplybook_app .gap-4{gap:calc(var(--spacing)*4)}#simplybook_app .gap-5{gap:calc(var(--spacing)*5)}#simplybook_app .gap-6{gap:calc(var(--spacing)*6)}#simplybook_app .gap-8{gap:calc(var(--spacing)*8)}#simplybook_app .gap-24{gap:calc(var(--spacing)*24)}:where(#simplybook_app .space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}:where(#simplybook_app .space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}#simplybook_app .gap-x-4{column-gap:calc(var(--spacing)*4)}:where(#simplybook_app .space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}:where(#simplybook_app .space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*3*var(--tw-space-x-reverse))}#simplybook_app .gap-y-4{row-gap:calc(var(--spacing)*4)}#simplybook_app .self-center{align-self:center}#simplybook_app .self-start{align-self:flex-start}#simplybook_app .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#simplybook_app .overflow-hidden{overflow:hidden}#simplybook_app .overflow-x-scroll{overflow-x:scroll}#simplybook_app .overflow-y-auto{overflow-y:auto}#simplybook_app .overflow-y-scroll{overflow-y:scroll}#simplybook_app .rounded{border-radius:.25rem}#simplybook_app .rounded-\[3rem\]{border-radius:3rem}#simplybook_app .rounded-full{border-radius:3.40282e+38px}#simplybook_app .rounded-lg{border-radius:var(--radius-lg)}#simplybook_app .rounded-md{border-radius:var(--radius-md)}#simplybook_app .rounded-sm{border-radius:var(--radius-sm)}#simplybook_app .rounded-xl{border-radius:var(--radius-xl)}#simplybook_app .rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}#simplybook_app .rounded-b-lg{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}#simplybook_app .rounded-b-md{border-bottom-left-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}#simplybook_app .rounded-b-none{border-bottom-left-radius:0;border-bottom-right-radius:0}#simplybook_app .border,#simplybook_app .border-1{border-style:var(--tw-border-style);border-width:1px}#simplybook_app .border-2{border-style:var(--tw-border-style);border-width:2px}#simplybook_app .border-3{border-style:var(--tw-border-style);border-width:3px}#simplybook_app .border-t{border-top-style:var(--tw-border-style);border-top-width:1px}#simplybook_app .border-b-1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}#simplybook_app .border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}#simplybook_app .border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}#simplybook_app .border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}#simplybook_app .\!border-sb-blue{border-color:var(--color-sb-blue)!important}#simplybook_app .\!border-secondary{border-color:#ff3259!important}#simplybook_app .border-\[\#E1E7F5\]{border-color:#e1e7f5}#simplybook_app .border-\[\#e6e6e6\]{border-color:#e6e6e6}#simplybook_app .border-black{border-color:var(--color-black)}#simplybook_app .border-blue-500{border-color:var(--color-blue-500)}#simplybook_app .border-blue-600{border-color:var(--color-blue-600)}#simplybook_app .border-gray-200{border-color:var(--color-gray-200)}#simplybook_app .border-gray-300{border-color:var(--color-gray-300)}#simplybook_app .border-gray-400{border-color:var(--color-gray-400)}#simplybook_app .border-green-600{border-color:var(--color-green-600)}#simplybook_app .border-inherit{border-color:inherit}#simplybook_app .border-primary{border-color:#06adef}#simplybook_app .border-red-400{border-color:var(--color-red-400)}#simplybook_app .border-red-500{border-color:var(--color-red-500)}#simplybook_app .border-red-600{border-color:var(--color-red-600)}#simplybook_app .border-sb-blue{border-color:var(--color-sb-blue)}#simplybook_app .border-secondary{border-color:#ff3259}#simplybook_app .border-tertiary{border-color:#0c3052}#simplybook_app .border-tertiary-border{border-color:var(--color-tertiary-border)}#simplybook_app .border-transparent{border-color:#0000}#simplybook_app .border-b-\[\#E1E7F5\]{border-bottom-color:#e1e7f5}#simplybook_app .\!bg-transparent{background-color:#0000!important}#simplybook_app .bg-accent-light-blue{background-color:var(--color-accent-light-blue)}#simplybook_app .bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}#simplybook_app .bg-blue-50{background-color:var(--color-blue-50)}#simplybook_app .bg-blue-100{background-color:var(--color-blue-100)}#simplybook_app .bg-blue-500{background-color:var(--color-blue-500)}#simplybook_app .bg-gray-50{background-color:var(--color-gray-50)}#simplybook_app .bg-gray-100{background-color:var(--color-gray-100)}#simplybook_app .bg-gray-200{background-color:var(--color-gray-200)}#simplybook_app .bg-gray-300{background-color:var(--color-gray-300)}#simplybook_app .bg-green-100{background-color:var(--color-green-100)}#simplybook_app .bg-green-500{background-color:var(--color-green-500)}#simplybook_app .bg-primary{background-color:#06adef}#simplybook_app .bg-primary-lighter{background-color:var(--color-primary-lighter)}#simplybook_app .bg-red-100{background-color:var(--color-red-100)}#simplybook_app .bg-red-600{background-color:var(--color-red-600)}#simplybook_app .bg-red-800{background-color:var(--color-red-800)}#simplybook_app .bg-secondary{background-color:#ff3259}#simplybook_app .bg-secondary-dark{background-color:#950c28}#simplybook_app .bg-slate-600{background-color:var(--color-slate-600)}#simplybook_app .bg-succes{background-color:var(--color-succes)}#simplybook_app .bg-succes-light{background-color:var(--color-succes-light)}#simplybook_app .bg-tertiary{background-color:#0c3052}#simplybook_app .bg-tertiary-dark{background-color:#061f32}#simplybook_app .bg-tertiary-light{background-color:#f0f4fe}#simplybook_app .bg-transparent{background-color:#0000}#simplybook_app .bg-white{background-color:var(--color-white)}#simplybook_app .bg-yellow-100{background-color:var(--color-yellow-100)}#simplybook_app .bg-yellow-400{background-color:var(--color-yellow-400)}#simplybook_app .bg-yellow-900{background-color:var(--color-yellow-900)}#simplybook_app .\!p-4{padding:calc(var(--spacing)*4)!important}#simplybook_app .p-0{padding:calc(var(--spacing)*0)}#simplybook_app .p-1{padding:calc(var(--spacing)*1)}#simplybook_app .p-1\.5{padding:calc(var(--spacing)*1.5)}#simplybook_app .p-2{padding:calc(var(--spacing)*2)}#simplybook_app .p-3{padding:calc(var(--spacing)*3)}#simplybook_app .p-4{padding:calc(var(--spacing)*4)}#simplybook_app .p-5{padding:calc(var(--spacing)*5)}#simplybook_app .p-6{padding:calc(var(--spacing)*6)}#simplybook_app .p-8{padding:calc(var(--spacing)*8)}#simplybook_app .px-0{padding-inline:calc(var(--spacing)*0)}#simplybook_app .px-1{padding-inline:calc(var(--spacing)*1)}#simplybook_app .px-2{padding-inline:calc(var(--spacing)*2)}#simplybook_app .px-3{padding-inline:calc(var(--spacing)*3)}#simplybook_app .px-4{padding-inline:calc(var(--spacing)*4)}#simplybook_app .px-5{padding-inline:calc(var(--spacing)*5)}#simplybook_app .px-6{padding-inline:calc(var(--spacing)*6)}#simplybook_app .px-8{padding-inline:calc(var(--spacing)*8)}#simplybook_app .py-0{padding-block:calc(var(--spacing)*0)}#simplybook_app .py-1{padding-block:calc(var(--spacing)*1)}#simplybook_app .py-2{padding-block:calc(var(--spacing)*2)}#simplybook_app .py-3{padding-block:calc(var(--spacing)*3)}#simplybook_app .py-4{padding-block:calc(var(--spacing)*4)}#simplybook_app .py-5{padding-block:calc(var(--spacing)*5)}#simplybook_app .py-6{padding-block:calc(var(--spacing)*6)}#simplybook_app .py-8{padding-block:calc(var(--spacing)*8)}#simplybook_app .py-10{padding-block:calc(var(--spacing)*10)}#simplybook_app .py-\[23px\]{padding-block:23px}#simplybook_app .pt-4{padding-top:calc(var(--spacing)*4)}#simplybook_app .pr-1{padding-right:calc(var(--spacing)*1)}#simplybook_app .pb-1{padding-bottom:calc(var(--spacing)*1)}#simplybook_app .pb-2{padding-bottom:calc(var(--spacing)*2)}#simplybook_app .pb-4{padding-bottom:calc(var(--spacing)*4)}#simplybook_app .pl-5{padding-left:calc(var(--spacing)*5)}#simplybook_app .text-center{text-align:center}#simplybook_app .text-justify{text-align:justify}#simplybook_app .text-left{text-align:left}#simplybook_app .text-right{text-align:right}#simplybook_app .text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}#simplybook_app .text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}#simplybook_app .text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}#simplybook_app .text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}#simplybook_app .text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}#simplybook_app .text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}#simplybook_app .text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}#simplybook_app .text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}#simplybook_app .text-\[0\.85rem\]{font-size:.85rem}#simplybook_app .text-\[0\.8125rem\]{font-size:.8125rem}#simplybook_app .text-label{font-size:var(--text-label)}#simplybook_app .text-xxs{font-size:var(--text-xxs)}#simplybook_app .leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}#simplybook_app .leading-none{--tw-leading:1;line-height:1}#simplybook_app .font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}#simplybook_app .font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}#simplybook_app .font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}#simplybook_app .font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}#simplybook_app .font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}#simplybook_app .font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}#simplybook_app .text-nowrap{text-wrap:nowrap}#simplybook_app .text-wrap{text-wrap:wrap}#simplybook_app .text-ellipsis{text-overflow:ellipsis}#simplybook_app .whitespace-nowrap{white-space:nowrap}#simplybook_app .\!text-sb-blue{color:var(--color-sb-blue)!important}#simplybook_app .text-\[\#333\]{color:#333}#simplybook_app .text-black{color:#000c}#simplybook_app .text-blue-600{color:var(--color-blue-600)}#simplybook_app .text-gray-400{color:var(--color-gray-400)}#simplybook_app .text-gray-500{color:var(--color-gray-500)}#simplybook_app .text-gray-600{color:var(--color-gray-600)}#simplybook_app .text-gray-700{color:var(--color-gray-700)}#simplybook_app .text-gray-800{color:var(--color-gray-800)}#simplybook_app .text-gray-900{color:var(--color-gray-900)}#simplybook_app .text-green-500{color:var(--color-green-500)}#simplybook_app .text-green-600{color:var(--color-green-600)}#simplybook_app .text-neutral-200{color:var(--color-neutral-200)}#simplybook_app .text-primary{color:#06adef}#simplybook_app .text-red-500{color:var(--color-red-500)}#simplybook_app .text-red-600{color:var(--color-red-600)}#simplybook_app .text-red-700{color:var(--color-red-700)}#simplybook_app .text-sb-blue{color:var(--color-sb-blue)}#simplybook_app .text-sb-gray{color:var(--color-sb-gray)}#simplybook_app .text-succes{color:var(--color-succes)}#simplybook_app .text-tertiary{color:#0c3052}#simplybook_app .text-white{color:#ffffffd9}#simplybook_app .text-yellow-900{color:var(--color-yellow-900)}#simplybook_app .lowercase{text-transform:lowercase}#simplybook_app .uppercase{text-transform:uppercase}#simplybook_app .italic{font-style:italic}#simplybook_app .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}#simplybook_app .line-through{text-decoration-line:line-through}#simplybook_app .no-underline{text-decoration-line:none}#simplybook_app .underline{text-decoration-line:underline}#simplybook_app .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#simplybook_app .opacity-50{opacity:.5}#simplybook_app .shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}#simplybook_app .shadow,#simplybook_app .shadow-lg{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}#simplybook_app .shadow-md{--tw-shadow:0px 9px 14px -2px var(--tw-shadow-color,#0000001a)}#simplybook_app .shadow-md,#simplybook_app .shadow-none{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .shadow-none{--tw-shadow:0 0 #0000}#simplybook_app .shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}#simplybook_app .ring,#simplybook_app .shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)}#simplybook_app .ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .ring-red-600{--tw-ring-color:var(--color-red-600)}#simplybook_app .outline{outline-style:var(--tw-outline-style);outline-width:1px}#simplybook_app .blur{--tw-blur:blur(8px)}#simplybook_app .blur,#simplybook_app .blur-sm{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}#simplybook_app .blur-sm{--tw-blur:blur(var(--blur-sm))}#simplybook_app .grayscale{--tw-grayscale:grayscale(100%)}#simplybook_app .filter,#simplybook_app .grayscale{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}#simplybook_app .transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-\[border-color\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .duration-100{--tw-duration:.1s;transition-duration:.1s}#simplybook_app .duration-200{--tw-duration:.2s;transition-duration:.2s}#simplybook_app .duration-300{--tw-duration:.3s;transition-duration:.3s}#simplybook_app .ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}#simplybook_app .ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}#simplybook_app .aspect-h-9{--tw-aspect-h:9}@media (hover:hover){#simplybook_app .group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}}#simplybook_app .peer-checked\:bg-blue-600:is(:where(.peer):checked~*){background-color:var(--color-blue-600)}#simplybook_app .peer-focus\:ring-2:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .peer-focus\:ring-4:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .peer-focus\:ring-blue-300:is(:where(.peer):focus~*){--tw-ring-color:var(--color-blue-300)}#simplybook_app .after\:absolute:after{content:var(--tw-content);position:absolute}#simplybook_app .after\:top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*.5)}#simplybook_app .after\:top-1:after{content:var(--tw-content);top:calc(var(--spacing)*1)}#simplybook_app .after\:left-0\.5:after{content:var(--tw-content);left:calc(var(--spacing)*.5)}#simplybook_app .after\:mx-\[0\.2rem\]:after{content:var(--tw-content);margin-inline:.2rem}#simplybook_app .after\:aspect-square:after{aspect-ratio:1;content:var(--tw-content)}#simplybook_app .after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing)*3)}#simplybook_app .after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing)*4)}#simplybook_app .after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing)*3)}#simplybook_app .after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing)*4)}#simplybook_app .after\:rounded-full:after{border-radius:3.40282e+38px;content:var(--tw-content)}#simplybook_app .after\:border:after{border-style:var(--tw-border-style);border-width:1px;content:var(--tw-content)}#simplybook_app .after\:border-gray-200:after{border-color:var(--color-gray-200);content:var(--tw-content)}#simplybook_app .after\:bg-white:after{background-color:var(--color-white);content:var(--tw-content)}#simplybook_app .after\:transition-all:after{content:var(--tw-content);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}#simplybook_app .after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}#simplybook_app .peer-checked\:after\:translate-x-\[0\.8rem\]:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:.8rem;translate:var(--tw-translate-x)var(--tw-translate-y)}#simplybook_app .peer-checked\:after\:translate-x-\[1\.125rem\]:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:1.125rem;translate:var(--tw-translate-x)var(--tw-translate-y)}#simplybook_app .peer-checked\:after\:border-white:is(:where(.peer):checked~*):after{border-color:var(--color-white);content:var(--tw-content)}#simplybook_app .last\:mb-3:last-child{margin-bottom:calc(var(--spacing)*3)}#simplybook_app .odd\:bg-white:nth-child(odd){background-color:var(--color-white)}#simplybook_app .even\:bg-gray-50:nth-child(2n){background-color:var(--color-gray-50)}@media (hover:hover){#simplybook_app .hover\:border-blue-500:hover{border-color:var(--color-blue-500)}#simplybook_app .hover\:border-gray-500:hover{border-color:var(--color-gray-500)}#simplybook_app .hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}#simplybook_app .hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}#simplybook_app .hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}#simplybook_app .hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}#simplybook_app .hover\:bg-primary-dark:hover{background-color:#055b78}#simplybook_app .hover\:bg-primary-lighter:hover{background-color:var(--color-primary-lighter)}#simplybook_app .hover\:bg-red-100:hover{background-color:var(--color-red-100)}#simplybook_app .hover\:bg-secondary-dark:hover{background-color:#950c28}#simplybook_app .hover\:bg-tertiary:hover{background-color:#0c3052}#simplybook_app .hover\:bg-tertiary-dark:hover{background-color:#061f32}#simplybook_app .hover\:bg-tertiary-light:hover{background-color:#f0f4fe}#simplybook_app .hover\:text-blue-800:hover{color:var(--color-blue-800)}#simplybook_app .hover\:text-gray-600:hover{color:var(--color-gray-600)}#simplybook_app .hover\:text-primary:hover{color:#06adef}#simplybook_app .hover\:text-red-600:hover{color:var(--color-red-600)}#simplybook_app .hover\:text-tertiary:hover{color:#0c3052}#simplybook_app .hover\:text-tertiary\/80:hover{color:oklab(30.3585% -.0243458 -.0693881/.8)}#simplybook_app .hover\:text-white:hover{color:#ffffffd9}#simplybook_app .hover\:underline:hover{text-decoration-line:underline}}#simplybook_app .focus\:border-tertiary:focus{border-color:#0c3052}#simplybook_app .focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)}#simplybook_app .focus\:ring-2:focus,#simplybook_app .focus\:ring-4:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor)}#simplybook_app .focus\:ring-blue-300:focus{--tw-ring-color:var(--color-blue-300)}#simplybook_app .focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}#simplybook_app .focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){#simplybook_app .focus\:outline-hidden:focus{outline:2px solid #0000;outline-offset:2px}}#simplybook_app .active\:ring-4:active{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}#simplybook_app .active\:ring-blue-300:active{--tw-ring-color:var(--color-blue-300)}#simplybook_app .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}#simplybook_app .disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){#simplybook_app .sm\:col-span-6{grid-column:span 6/span 6}#simplybook_app .sm\:col-span-12{grid-column:span 12/span 12}#simplybook_app .sm\:flex{display:flex}#simplybook_app .sm\:max-w-1\/2{max-width:50%}#simplybook_app .sm\:max-w-\[80\%\]{max-width:80%}#simplybook_app .sm\:text-start{text-align:start}}@media (width>=48rem){#simplybook_app .md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}#simplybook_app .md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){#simplybook_app .lg\:col-span-3{grid-column:span 3/span 3}#simplybook_app .lg\:col-span-6{grid-column:span 6/span 6}#simplybook_app .lg\:w-auto{width:auto}#simplybook_app .lg\:max-w-\[70\%\]{max-width:70%}#simplybook_app .lg\:gap-y-4{row-gap:calc(var(--spacing)*4)}}@media (width>=80rem){#simplybook_app .xl\:order-0{order:0}#simplybook_app .xl\:col-span-3{grid-column:span 3/span 3}#simplybook_app .xl\:col-span-4{grid-column:span 4/span 4}#simplybook_app .xl\:col-span-5{grid-column:span 5/span 5}#simplybook_app .xl\:col-span-6{grid-column:span 6/span 6}#simplybook_app .xl\:col-start-2{grid-column-start:2}#simplybook_app .xl\:block{display:block}#simplybook_app .xl\:flex{display:flex}#simplybook_app .xl\:grid{display:grid}#simplybook_app .xl\:h-auto{height:auto}#simplybook_app .xl\:w-\[130px\]{width:130px}#simplybook_app .xl\:w-auto{width:auto}#simplybook_app .xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}#simplybook_app .xl\:grid-cols-\[130px_1fr_auto_2em\]{grid-template-columns:130px 1fr auto 2em}#simplybook_app .xl\:flex-wrap{flex-wrap:wrap}#simplybook_app .xl\:items-center{align-items:center}#simplybook_app .xl\:justify-between{justify-content:space-between}#simplybook_app .xl\:justify-center{justify-content:center}#simplybook_app .xl\:justify-normal{justify-content:normal}#simplybook_app .xl\:gap-6{gap:calc(var(--spacing)*6)}#simplybook_app .xl\:gap-24{gap:calc(var(--spacing)*24)}#simplybook_app .xl\:rounded-sm{border-radius:var(--radius-sm)}#simplybook_app .xl\:p-0{padding:calc(var(--spacing)*0)}#simplybook_app .xl\:px-1{padding-inline:calc(var(--spacing)*1)}#simplybook_app .xl\:px-4{padding-inline:calc(var(--spacing)*4)}#simplybook_app .xl\:py-0{padding-block:calc(var(--spacing)*0)}#simplybook_app .xl\:py-1{padding-block:calc(var(--spacing)*1)}#simplybook_app .xl\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}#simplybook_app .xl\:pt-0{padding-top:calc(var(--spacing)*0)}#simplybook_app .xl\:text-center{text-align:center}}#simplybook_app .\[\&\.active\]\:border-tertiary.active{border-color:#0c3052}#simplybook_app .\[\&\.active\]\:font-semibold.active{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}#simplybook_app .\[\&\.active\]\:text-primary.active{color:#06adef}@media (hover:hover){#simplybook_app .hover\:\[\&\>svg\]\:text-primary:hover>svg{color:#06adef}}:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74d3c;--toastify-color-transparent:#ffffffb3;--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-container-width:fit-content;--toastify-toast-width:320px;--toastify-toast-offset:16px;--toastify-toast-top:max(var(--toastify-toast-offset),env(safe-area-inset-top));--toastify-toast-right:max(var(--toastify-toast-offset),env(safe-area-inset-right));--toastify-toast-left:max(var(--toastify-toast-offset),env(safe-area-inset-left));--toastify-toast-bottom:max(var(--toastify-toast-offset),env(safe-area-inset-bottom));--toastify-toast-background:#fff;--toastify-toast-padding:14px;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-toast-bd-radius:6px;--toastify-toast-shadow:0px 4px 12px #0000001a;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-bgo:.2}.Toastify__toast-container{box-sizing:border-box;color:#fff;display:flex;flex-direction:column;position:fixed;-webkit-transform:translateZ(var(--toastify-z-index));width:var(--toastify-container-width);z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:var(--toastify-toast-left);top:var(--toastify-toast-top)}.Toastify__toast-container--top-center{align-items:center;left:50%;top:var(--toastify-toast-top);transform:translate(-50%)}.Toastify__toast-container--top-right{align-items:end;right:var(--toastify-toast-right);top:var(--toastify-toast-top)}.Toastify__toast-container--bottom-left{bottom:var(--toastify-toast-bottom);left:var(--toastify-toast-left)}.Toastify__toast-container--bottom-center{align-items:center;bottom:var(--toastify-toast-bottom);left:50%;transform:translate(-50%)}.Toastify__toast-container--bottom-right{align-items:end;bottom:var(--toastify-toast-bottom);right:var(--toastify-toast-right)}.Toastify__toast{--y:0;align-items:center;border-radius:var(--toastify-toast-bd-radius);box-shadow:var(--toastify-toast-shadow);box-sizing:border-box;display:flex;flex:auto;font-family:var(--toastify-font-family);margin-bottom:1rem;max-height:var(--toastify-toast-max-height);min-height:var(--toastify-toast-min-height);padding:var(--toastify-toast-padding);position:relative;touch-action:none;width:var(--toastify-toast-width);word-break:break-word;z-index:0}@media only screen and (width<=480px){.Toastify__toast-container{left:env(safe-area-inset-left);margin:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:env(safe-area-inset-top);transform:translate(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:env(safe-area-inset-bottom);transform:translate(0)}.Toastify__toast-container--rtl{left:auto;right:env(safe-area-inset-right)}.Toastify__toast{--toastify-toast-width:100%;border-radius:0;margin-bottom:0}}.Toastify__toast-container[data-stacked=true]{width:var(--toastify-toast-width)}.Toastify__toast--stacked{position:absolute;transform:translate3d(0,var(--y),0)scale(var(--s));transition:transform .3s;width:100%}.Toastify__toast--stacked[data-collapsed] .Toastify__close-button,.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body{transition:opacity .1s}.Toastify__toast--stacked[data-collapsed=false]{overflow:visible}.Toastify__toast--stacked[data-collapsed=true]:not(:last-child)>*{opacity:0}.Toastify__toast--stacked:after{bottom:100%;content:"";height:calc(var(--g)*1px);left:0;position:absolute;right:0}.Toastify__toast--stacked[data-pos=top]{top:0}.Toastify__toast--stacked[data-pos=bot]{bottom:0}.Toastify__toast--stacked[data-pos=bot].Toastify__toast--stacked:before{transform-origin:top}.Toastify__toast--stacked[data-pos=top].Toastify__toast--stacked:before{transform-origin:bottom}.Toastify__toast--stacked:before{bottom:0;content:"";height:100%;left:0;position:absolute;right:0;transform:scaleY(3);z-index:-1}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-icon{display:flex;flex-shrink:0;margin-inline-end:10px;width:22px}.Toastify--animate{animation-duration:.5s;animation-fill-mode:both}.Toastify--animate-icon{animation-duration:.3s;animation-fill-mode:both}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:var(--toastify-color-info);color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:var(--toastify-color-success);color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:var(--toastify-color-warning);color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:var(--toastify-color-error);color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:var(--toastify-color-transparent)}.Toastify__close-button{background:0 0;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;position:absolute;right:6px;top:6px;transition:all .3s;z-index:1}.Toastify__toast--rtl .Toastify__close-button{left:6px;right:unset}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:100%;left:0;opacity:.7;position:absolute;transform-origin:0;width:100%;z-index:1}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{border-bottom-left-radius:0;left:auto;right:0;transform-origin:100%}.Toastify__progress-bar--wrp{border-bottom-left-radius:var(--toastify-toast-bd-radius);border-bottom-right-radius:var(--toastify-toast-bd-radius);bottom:0;height:5px;left:0;overflow:hidden;position:absolute;width:100%}.Toastify__progress-bar--wrp[data-hidden=true]{opacity:0}.Toastify__progress-bar--bg{height:100%;opacity:var(--toastify-color-progress-bgo);width:100%}.Toastify__spinner{animation:Toastify__spin .65s linear infinite;border:2px solid;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate(3000px)}60%{opacity:1;transform:translate(-25px)}75%{transform:translate(10px)}90%{transform:translate(-5px)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,var(--y),0)}to{opacity:0;transform:translate3d(2000px,var(--y),0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate(-3000px)}60%{opacity:1;transform:translate(25px)}75%{transform:translate(-10px)}90%{transform:translate(5px)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,var(--y),0)}to{opacity:0;transform:translate3d(-2000px,var(--y),0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translateY(3000px)}60%{opacity:1;transform:translateY(-20px)}75%{transform:translateY(10px)}90%{transform:translateY(-5px)}to{transform:translate(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translateY(-2000px)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translateY(-3000px)}60%{opacity:1;transform:translateY(25px)}75%{transform:translateY(-10px)}90%{transform:translateY(5px)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translateY(2000px)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:translate3d(0,var(--y),0)scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px)rotateX(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px)rotateX(-20deg)}60%{opacity:1;transform:perspective(400px)rotateX(10deg)}80%{transform:perspective(400px)rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:translate3d(0,var(--y),0)perspective(400px)}30%{opacity:1;transform:translate3d(0,var(--y),0)perspective(400px)rotateX(-20deg)}to{opacity:0;transform:translate3d(0,var(--y),0)perspective(400px)rotateX(90deg)}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate(110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInLeft{0%{transform:translate(-110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInUp{0%{transform:translateY(110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInDown{0%{transform:translateY(-110%);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideOutRight{0%{transform:translate3d(0,var(--y),0)}to{transform:translate3d(110%,var(--y),0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{transform:translate3d(0,var(--y),0)}to{transform:translate3d(-110%,var(--y),0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{transform:translate3d(0,var(--y),0)}to{transform:translateY(500px);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{transform:translate3d(0,var(--y),0)}to{transform:translateY(-500px);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{animation-duration:.3s;animation-name:Toastify__slideOutLeft;animation-timing-function:ease-in}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{animation-duration:.3s;animation-name:Toastify__slideOutRight;animation-timing-function:ease-in}.Toastify__slide-exit--top-center{animation-duration:.3s;animation-name:Toastify__slideOutUp;animation-timing-function:ease-in}.Toastify__slide-exit--bottom-center{animation-duration:.3s;animation-name:Toastify__slideOutDown;animation-timing-function:ease-in}@keyframes Toastify__spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:root{--rt-color-white:#fff;--rt-color-dark:#222;--rt-color-success:#8dc572;--rt-color-error:#be6464;--rt-color-warning:#f0ad4e;--rt-color-info:#337ab7;--rt-opacity:.9;--rt-transition-show-delay:.15s;--rt-transition-closing-delay:.15s}.core-styles-module_tooltip__3vRRp{left:0;opacity:0;pointer-events:none;position:absolute;top:0;will-change:opacity}.core-styles-module_fixed__pcSol{position:fixed}.core-styles-module_arrow__cvMwQ{background:inherit;position:absolute}.core-styles-module_noArrow__xock6{display:none}.core-styles-module_clickable__ZuTTB{pointer-events:auto}.core-styles-module_show__Nt9eE{opacity:var(--rt-opacity);transition:opacity var(--rt-transition-show-delay)ease-out}.core-styles-module_closing__sGnxF{opacity:0;transition:opacity var(--rt-transition-closing-delay)ease-in}.styles-module_tooltip__mnnfp{border-radius:3px;font-size:90%;padding:8px 16px;width:max-content}.styles-module_arrow__K0L3T{height:8px;width:8px}[class*=react-tooltip__place-top]>.styles-module_arrow__K0L3T{transform:rotate(45deg)}[class*=react-tooltip__place-right]>.styles-module_arrow__K0L3T{transform:rotate(135deg)}[class*=react-tooltip__place-bottom]>.styles-module_arrow__K0L3T{transform:rotate(225deg)}[class*=react-tooltip__place-left]>.styles-module_arrow__K0L3T{transform:rotate(315deg)}.styles-module_dark__xNqje{background:var(--rt-color-dark);color:var(--rt-color-white)}.styles-module_light__Z6W-X{background-color:var(--rt-color-white);color:var(--rt-color-dark)}.styles-module_success__A2AKt{background-color:var(--rt-color-success);color:var(--rt-color-white)}.styles-module_warning__SCK0X{background-color:var(--rt-color-warning);color:var(--rt-color-white)}.styles-module_error__JvumD{background-color:var(--rt-color-error);color:var(--rt-color-white)}.styles-module_info__BWdHW{background-color:var(--rt-color-info);color:var(--rt-color-white)}:root{--toastify-toast-min-height:3rem}#wpcontent{padding-left:0!important}#adminmenu .wp-menu-image img{display:initial}:is(input,select,textarea,button,.checkbox-field,.radio-field,.notification-box,a):focus{outline:2px solid var(--color-primary-hover)}small{font-size:var(--text-base)}h1,h2,h3,h4,h5 h6{margin:0}h1{font-size:var(--text-3xl)}h2{font-size:var(--text-2xl)}h3{font-size:var(--text-xl)}.max-w-container{width:2000px}.onboarding-body{height:100%;margin:1svh auto}.form-field-inline{width:48.5%}.theme-config{width:100%}.theme-config-group-color{column-gap:1rem;display:grid;flex-wrap:wrap;grid-template-columns:repeat(2,minmax(0,1fr));justify-content:space-between;margin:1.5rem auto}@media screen and (width<=40rem){.theme-config-group-color{grid-template-columns:repeat(1,minmax(0,1fr))}}.theme-config-group-color>.theme-config-field{grid-column:span 1;width:100%}#field-tooltip{background:color-mix(in oklab,var(--color-neutral-800)60%,transparent);font-size:var(--text-xs);font-weight:400;max-width:300px;z-index:99999}#simplybook_app label{font-size:var(--text-label);font-weight:var(--font-weight-medium);margin-bottom:.5rem}#simplybook_app .input-base{box-shadow:var(--shadow-md)}#simplybook_app .input-base,#simplybook_app .input-base-no-shadow{border-color:var(--color-gray-200);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:2px;font-size:var(--text-base);line-height:1.5;max-width:100%;padding:.5rem;position:relative;width:100%}#simplybook_app .checkbox-field{border:2px solid #0000}#simplybook_app img{display:inline}.scroll-container::-webkit-scrollbar{background-color:var(--color-gray-300);border-radius:10px;width:8px}.scroll-container::-webkit-scrollbar-thumb{background-color:var(--color-gray-500);border-radius:10px}.scroll-container::-webkit-scrollbar-track{background-color:#0000;border-radius:10px;-webkit-box-shadow:inset 0 0 2px #0000}.invalid-field-regex input,.invalid-field-required .checkbox-field,.invalid-field-required input,.invalid-field-required select{border-color:var(--color-error)!important}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}} -
simplybook/trunk/assets/languages/simplybook.pot
r3384996 r3399722 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: SimplyBook.me - Booking and reservations calendar 3.2. 2\n"5 "Project-Id-Version: SimplyBook.me - Booking and reservations calendar 3.2.3\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simplybook\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2025-1 0-21T06:26:21+00:00\n"12 "POT-Creation-Date: 2025-11-20T10:56:35+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.11.0\n" … … 40 40 msgstr "" 41 41 42 #: app/Controllers/AdminController.php:4 643 #: react/build/79. 712c746b580f9980027a.js:144 #: react/build/107. 00e9e978ad301065b8c0.js:142 #: app/Controllers/AdminController.php:47 43 #: react/build/79.60f8a3c25a3089f47e58.js:1 44 #: react/build/107.e36c77fdbbf228e1331a.js:1 45 45 #: react/src/components/Settings/SettingsMenu.jsx:16 46 46 #: react/src/components/Settings/SettingsMenu.jsx:29 … … 48 48 msgstr "" 49 49 50 #: app/Controllers/AdminController.php:5 050 #: app/Controllers/AdminController.php:51 51 51 msgid "Support" 52 52 msgstr "" 53 53 54 54 #. translators: %1$s and %2$s are replaced with opening and closing tags to bold the text 55 #: app/Controllers/AdminController.php:6 755 #: app/Controllers/AdminController.php:68 56 56 msgid "The %1$sSimplyBook.me%2$s plugin relies on the %1$sWordPress REST API%2$s to register new accounts. However, the REST API is currently inaccessible to logged-out users. Please ensure that the REST API is enabled and publicly accessible." 57 57 msgstr "" 58 58 59 #: app/Controllers/BlockController.php:5 159 #: app/Controllers/BlockController.php:54 60 60 msgid "A widget for Simplybook.me" 61 61 msgstr "" 62 62 63 #: app/Controllers/DashboardController.php: 8664 #: app/Controllers/DashboardController.php: 8763 #: app/Controllers/DashboardController.php:94 64 #: app/Controllers/DashboardController.php:95 65 65 #: app/Features/TaskManagement/Tasks/GoToSimplyBookSystemTask.php:29 66 66 msgid "SimplyBook.me" … … 68 68 69 69 #. translators: %1$d is replaced by the amount of bookings, %2$ and %23$ are replaced with opening and closing a tag containing hyperlink 70 #: app/Controllers/ReviewController.php:5 270 #: app/Controllers/ReviewController.php:53 71 71 msgid "Hi, SimplyBook.me has helped you reach %1$d bookings in the last 30 days. If you have a moment, please consider leaving a review on WordPress.org to spread the word. We greatly appreciate it! If you have any questions or feedback, leave us a %2$smessage%3$s." 72 72 msgstr "" 73 73 74 #: app/Controllers/ScheduleController.php:1 674 #: app/Controllers/ScheduleController.php:19 75 75 msgid "Once every day" 76 76 msgstr "" 77 77 78 #: app/Controllers/TrialExpirationController.php:5 078 #: app/Controllers/TrialExpirationController.php:51 79 79 msgid "Your free SimplyBook.me trial period has expired. Discover which plans best suit your site to continue gathering bookings!" 80 80 msgstr "" 81 81 82 82 #. translators: %d is replaced by the number of days remaining 83 #: app/Controllers/TrialExpirationController.php:5 583 #: app/Controllers/TrialExpirationController.php:56 84 84 msgid "Your free SimplyBook.me trial period will expire in %d days. Discover which plans best suit your site to continue gathering bookings!" 85 85 msgstr "" … … 96 96 #: app/Features/Notifications/Notices/AddMandatoryProviderNotice.php:47 97 97 #: react/build/18.dda60173f985be980376.js:1 98 #: react/build/107. 00e9e978ad301065b8c0.js:198 #: react/build/107.e36c77fdbbf228e1331a.js:1 99 99 #: react/build/167.e823be3a69b27a68a9c9.js:1 100 100 #: react/build/249.307f4b603f01b9c80926.js:1 … … 118 118 #: app/Features/TaskManagement/Tasks/AddMandatoryServiceTask.php:39 119 119 #: react/build/18.dda60173f985be980376.js:1 120 #: react/build/107. 00e9e978ad301065b8c0.js:1120 #: react/build/107.e36c77fdbbf228e1331a.js:1 121 121 #: react/build/167.e823be3a69b27a68a9c9.js:1 122 122 #: react/build/249.307f4b603f01b9c80926.js:1 … … 133 133 134 134 #: app/Features/Notifications/Notices/FailedAuthenticationNotice.php:31 135 msgid "We ’ve lost connection to your SimplyBook.me account. Please log out and sign in again to reconnect."135 msgid "We've lost connection to your SimplyBook.me account. Please log out and sign in again to reconnect." 136 136 msgstr "" 137 137 … … 157 157 msgstr "" 158 158 159 #: app/Features/Notifications/Notices/PublishWidgetNotice.php:3 9159 #: app/Features/Notifications/Notices/PublishWidgetNotice.php:37 160 160 msgid "No booking widget detected!" 161 161 msgstr "" 162 162 163 #: app/Features/Notifications/Notices/PublishWidgetNotice.php:4 7164 msgid "It seems that you haven ’t published the booking widget on the front-end of your site. Please use the shortcode or Gutenberg Widget to create your booking page to accept bookings!"163 #: app/Features/Notifications/Notices/PublishWidgetNotice.php:45 164 msgid "It seems that you haven't published the booking widget on the front-end of your site. Please use the shortcode or Gutenberg Widget to create your booking page to accept bookings!" 165 165 msgstr "" 166 166 167 167 #: app/Features/Onboarding/OnboardingController.php:140 168 168 #: app/Features/Onboarding/OnboardingController.php:282 169 #: app/Features/Onboarding/OnboardingController.php:32 4169 #: app/Features/Onboarding/OnboardingController.php:322 170 170 msgid "Please fill in all fields." 171 171 msgstr "" 172 172 173 #: app/Features/Onboarding/OnboardingController.php:16 4173 #: app/Features/Onboarding/OnboardingController.php:163 174 174 msgid "Please verify you're not a robot." 175 175 msgstr "" 176 176 177 #: app/Features/Onboarding/OnboardingController.php:16 8177 #: app/Features/Onboarding/OnboardingController.php:167 178 178 msgid "Please enter the confirmation code." 179 179 msgstr "" 180 180 181 #: app/Features/Onboarding/OnboardingController.php:20 7181 #: app/Features/Onboarding/OnboardingController.php:208 182 182 msgid "Something went wrong while saving the widget style settings. Please try again." 183 183 msgstr "" 184 184 185 #: app/Features/Onboarding/OnboardingController.php:21 2185 #: app/Features/Onboarding/OnboardingController.php:214 186 186 msgid "Successfully saved widget style settings" 187 187 msgstr "" 188 188 189 #: app/Features/Onboarding/OnboardingController.php:23 8189 #: app/Features/Onboarding/OnboardingController.php:239 190 190 msgid "Calendar page title should be available if you choose to generate this page." 191 191 msgstr "" 192 192 193 #: app/Features/Onboarding/OnboardingController.php: 301193 #: app/Features/Onboarding/OnboardingController.php:299 194 194 msgid "Unknown error occurred, please verify your credentials." 195 195 msgstr "" 196 196 197 #: app/Features/Onboarding/OnboardingController.php:30 8197 #: app/Features/Onboarding/OnboardingController.php:306 198 198 msgid "Login successful." 199 199 msgstr "" 200 200 201 #: app/Features/Onboarding/OnboardingController.php:3 41201 #: app/Features/Onboarding/OnboardingController.php:339 202 202 msgid "Unknown 2FA error occurred, please verify your credentials." 203 203 msgstr "" 204 204 205 #: app/Features/Onboarding/OnboardingController.php:34 6205 #: app/Features/Onboarding/OnboardingController.php:344 206 206 msgid "Successfully authenticated user" 207 207 msgstr "" 208 208 209 #: app/Features/Onboarding/OnboardingController.php:4 11209 #: app/Features/Onboarding/OnboardingController.php:409 210 210 msgid "Successfully requested SMS code" 211 211 msgstr "" 212 212 213 #: app/Features/Onboarding/OnboardingController.php:42 3213 #: app/Features/Onboarding/OnboardingController.php:421 214 214 msgid "Successfully finished onboarding!" 215 215 msgstr "" 216 216 217 #: app/Features/Onboarding/OnboardingController.php:42 7217 #: app/Features/Onboarding/OnboardingController.php:425 218 218 msgid "An error occurred while finishing the onboarding process" 219 219 msgstr "" 220 220 221 #: app/Features/Onboarding/OnboardingController.php:4 41221 #: app/Features/Onboarding/OnboardingController.php:439 222 222 msgid "Successfully removed all previous data." 223 223 msgstr "" 224 224 225 #: app/Features/Onboarding/OnboardingController.php:44 4225 #: app/Features/Onboarding/OnboardingController.php:442 226 226 msgid "An error occurred while trying to remove previous data." 227 227 msgstr "" 228 228 229 #: app/Features/Onboarding/OnboardingService.php: 79229 #: app/Features/Onboarding/OnboardingService.php:80 230 230 msgid "Please enter a valid email address and accept the terms and conditions" 231 231 msgstr "" 232 232 233 #: app/Features/TaskManagement/Tasks/AbstractTask.php:2 07233 #: app/Features/TaskManagement/Tasks/AbstractTask.php:224 234 234 msgid "Premium" 235 235 msgstr "" 236 236 237 #: app/Features/TaskManagement/Tasks/AbstractTask.php:2 11237 #: app/Features/TaskManagement/Tasks/AbstractTask.php:228 238 238 msgid "Special feature" 239 239 msgstr "" … … 270 270 msgstr "" 271 271 272 #. translators: 1: discount percentage, 2: promo code 273 #: app/Features/TaskManagement/Tasks/BlackFridayTask.php:33 274 msgid "Black Friday sale! Get %1$s Off SimplyBook.me with code %2$s" 275 msgstr "" 276 277 #: app/Features/TaskManagement/Tasks/BlackFridayTask.php:46 278 msgid "Claim discount" 279 msgstr "" 280 272 281 #: app/Features/TaskManagement/Tasks/CustomizeDesignTask.php:19 273 282 msgid "Customize your booking widget" … … 279 288 280 289 #: app/Features/TaskManagement/Tasks/FailedAuthenticationTask.php:27 281 msgid "We ’ve lost connection to your SimplyBook.me account. Reconnect by logging out via the general settings."290 msgid "We've lost connection to your SimplyBook.me account. Reconnect by logging out via the general settings." 282 291 msgstr "" 283 292 … … 306 315 #: app/Features/TaskManagement/Tasks/TrialExpiredTask.php:45 307 316 #: react/build/18.dda60173f985be980376.js:1 308 #: react/build/79. 712c746b580f9980027a.js:1309 #: react/build/107. 00e9e978ad301065b8c0.js:1317 #: react/build/79.60f8a3c25a3089f47e58.js:1 318 #: react/build/107.e36c77fdbbf228e1331a.js:1 310 319 #: react/build/167.e823be3a69b27a68a9c9.js:1 311 320 #: react/build/249.307f4b603f01b9c80926.js:1 … … 325 334 msgstr "" 326 335 327 #: app/Features/TaskManagement/Tasks/PublishWidgetTask.php:4 7336 #: app/Features/TaskManagement/Tasks/PublishWidgetTask.php:45 328 337 msgid "Publish the booking widget on the front-end of your site." 329 338 msgstr "" 330 339 331 #: app/Features/TaskManagement/Tasks/PublishWidgetTask.php:5 7340 #: app/Features/TaskManagement/Tasks/PublishWidgetTask.php:55 332 341 msgid "Show shortcodes" 333 342 msgstr "" … … 337 346 msgstr "" 338 347 339 #: app/Http/ApiClient.php: 599340 #: app/Http/ApiClient.php:80 7348 #: app/Http/ApiClient.php:614 349 #: app/Http/ApiClient.php:803 341 350 msgid "You are not authorized to do this." 342 351 msgstr "" 343 352 344 #: app/Http/ApiClient.php:6 05353 #: app/Http/ApiClient.php:620 345 354 msgid "Too many attempts to register company, please try again in a minute." 346 355 msgstr "" 347 356 348 #: app/Http/ApiClient.php:6 19357 #: app/Http/ApiClient.php:634 349 358 msgid "Please fill in all company data." 350 359 msgstr "" 351 360 352 #: app/Http/ApiClient.php:6 64361 #: app/Http/ApiClient.php:679 353 362 msgid "Something went wrong while registering your company. Please try again." 354 363 msgstr "" 355 364 356 #: app/Http/ApiClient.php:6 76365 #: app/Http/ApiClient.php:691 357 366 msgid "Company successfully registered." 358 367 msgstr "" 359 368 360 #: app/Http/ApiClient.php:7 09369 #: app/Http/ApiClient.php:724 361 370 msgid "The company name is not allowed. Please change the company name." 362 371 msgstr "" 363 372 364 #: app/Http/ApiClient.php:7 17373 #: app/Http/ApiClient.php:732 365 374 msgid "Unknown error encountered while registering your company. Please try again." 366 375 msgstr "" 367 376 368 #: app/Http/ApiClient.php:81 5377 #: app/Http/ApiClient.php:811 369 378 msgid "Something went wrong, are you sure you started the company registration?" 370 379 msgstr "" 371 380 372 #: app/Http/ApiClient.php:83 4381 #: app/Http/ApiClient.php:830 373 382 msgid "Something went wrong while confirming your email. Please try again." 374 383 msgstr "" 375 384 385 #: app/Http/ApiClient.php:838 386 msgid "Email successfully confirmed." 387 msgstr "" 388 376 389 #: app/Http/ApiClient.php:842 377 msgid "Email successfully confirmed."378 msgstr ""379 380 #: app/Http/ApiClient.php:846381 390 msgid "Unknown error encountered while confirming your email. Please try again." 382 391 msgstr "" 383 392 384 #: app/Http/ApiClient.php:84 8393 #: app/Http/ApiClient.php:844 385 394 msgid "This confirmation code is not valid." 386 395 msgstr "" 387 396 388 #: app/Http/ApiClient.php:12 43397 #: app/Http/ApiClient.php:1234 389 398 msgid "Login failed! Please try again later." 390 399 msgstr "" 391 400 392 #: app/Http/ApiClient.php:12 46401 #: app/Http/ApiClient.php:1237 393 402 msgid "Invalid response from SimplyBook.me" 394 403 msgstr "" 395 404 396 #: app/Http/ApiClient.php:129 9405 #: app/Http/ApiClient.php:1290 397 406 msgid "Two factor authentication failed! Please try again later." 398 407 msgstr "" 399 408 400 #: app/Http/ApiClient.php:1 302409 #: app/Http/ApiClient.php:1293 401 410 msgid "Invalid 2FA response from SimplyBook.me" 402 411 msgstr "" 403 412 413 #: app/Http/ApiClient.php:1318 414 msgid "No error received from remote." 415 msgstr "" 416 417 #: app/Http/ApiClient.php:1325 418 msgid "Invalid login or password, please try again." 419 msgstr "" 420 404 421 #: app/Http/ApiClient.php:1327 405 msgid "No error received from remote." 422 msgid "Incorrect 2FA authentication code, please try again." 423 msgstr "" 424 425 #: app/Http/ApiClient.php:1331 426 msgid "Too many login attempts. Verify your credentials and try again in a few minutes." 406 427 msgstr "" 407 428 408 429 #: app/Http/ApiClient.php:1334 409 msgid "Invalid login or password, please try again."410 msgstr ""411 412 #: app/Http/ApiClient.php:1336413 msgid "Incorrect 2FA authentication code, please try again."414 msgstr ""415 416 #: app/Http/ApiClient.php:1340417 msgid "Too many login attempts. Verify your credentials and try again in a few minutes."418 msgstr ""419 420 #: app/Http/ApiClient.php:1343421 430 msgid "Could not find a company associated with that company login." 422 431 msgstr "" 423 432 424 #: app/Http/ApiClient.php:13 46433 #: app/Http/ApiClient.php:1337 425 434 msgid "Authentication failed, please verify your credentials." 426 435 msgstr "" 427 436 428 #: app/Http/ApiClient.php:14 23437 #: app/Http/ApiClient.php:1414 429 438 #: react/build/843.f6b4fb618126e6186962.js:1 430 439 #: react/src/components/Modals/SignInModal.jsx:15 … … 432 441 msgstr "" 433 442 434 #: app/Http/ApiClient.php:14 24443 #: app/Http/ApiClient.php:1415 435 444 msgid "SMS" 436 445 msgstr "" 437 446 438 #: app/Http/ApiClient.php:14 30447 #: app/Http/ApiClient.php:1421 439 448 msgid "Unknown 2FA provider" 440 449 msgstr "" 441 450 442 #: app/Http/Endpoints/AbstractCrudEndpoint.php:6 8443 #: app/Http/Endpoints/AbstractCrudEndpoint.php:1 26451 #: app/Http/Endpoints/AbstractCrudEndpoint.php:69 452 #: app/Http/Endpoints/AbstractCrudEndpoint.php:131 444 453 msgid "Method not allowed" 445 454 msgstr "" … … 449 458 msgstr "" 450 459 451 #: app/Http/Endpoints/AbstractCrudEndpoint.php:103 452 #: app/Http/Endpoints/AbstractCrudEndpoint.php:164 453 msgid "successfully saved!" 454 msgstr "" 455 456 #: app/Http/Endpoints/AbstractCrudEndpoint.php:144 460 #. translators: %s is either 'Service' or 'Service Provider' 461 #: app/Http/Endpoints/AbstractCrudEndpoint.php:105 462 #: app/Http/Endpoints/AbstractCrudEndpoint.php:171 463 msgid "%s successfully saved!" 464 msgstr "" 465 466 #: app/Http/Endpoints/AbstractCrudEndpoint.php:149 457 467 msgid "Entity not found!" 458 468 msgstr "" 459 469 460 #: app/Http/Endpoints/AbstractCrudEndpoint.php:1 81470 #: app/Http/Endpoints/AbstractCrudEndpoint.php:191 461 471 msgid "Something went wrong while deleting." 462 472 msgstr "" 463 473 464 #: app/Http/Endpoints/AbstractCrudEndpoint.php:2 05474 #: app/Http/Endpoints/AbstractCrudEndpoint.php:215 465 475 msgid "An unknown error occurred. Please try again later." 466 476 msgstr "" 467 477 468 #: app/Http/Endpoints/AbstractCrudEndpoint.php:2 35478 #: app/Http/Endpoints/AbstractCrudEndpoint.php:245 469 479 msgid "An unknown error occurred while saving, please try again." 470 480 msgstr "" 471 481 472 #: app/Http/Endpoints/AbstractCrudEndpoint.php:2 43482 #: app/Http/Endpoints/AbstractCrudEndpoint.php:253 473 483 msgid "An error occurred while saving, please try again." 474 484 msgstr "" 475 485 476 #: app/Http/Endpoints/BlockEndpoints.php:12 0477 #: app/Support/Widgets/ElementorWidget.php:2 06486 #: app/Http/Endpoints/BlockEndpoints.php:121 487 #: app/Support/Widgets/ElementorWidget.php:210 478 488 msgid "Any provider" 479 489 msgstr "" 480 490 481 #: app/Http/Endpoints/LogOutEndpoint.php:5 1491 #: app/Http/Endpoints/LogOutEndpoint.php:52 482 492 msgid "User prevented logout." 483 493 msgstr "" 484 494 485 #: app/Http/Endpoints/LogOutEndpoint.php:5 5495 #: app/Http/Endpoints/LogOutEndpoint.php:56 486 496 msgid "User is logged out and will be redirected to onboarding." 487 497 msgstr "" 488 498 489 #: app/Http/Endpoints/LogOutEndpoint.php:5 7499 #: app/Http/Endpoints/LogOutEndpoint.php:58 490 500 msgid "Failed to log out user." 491 501 msgstr "" 492 502 493 #: app/Http/Endpoints/NoticesDismissEndpoint.php:6 5503 #: app/Http/Endpoints/NoticesDismissEndpoint.php:66 494 504 msgid "Failed to dismiss notice." 495 505 msgstr "" 496 506 497 #: app/Http/Endpoints/NoticesDismissEndpoint.php:7 3507 #: app/Http/Endpoints/NoticesDismissEndpoint.php:74 498 508 msgid "Notice dismissed successfully." 499 509 msgstr "" … … 507 517 msgstr "" 508 518 509 #: app/Http/Entities/AbstractEntity.php:2 63519 #: app/Http/Entities/AbstractEntity.php:284 510 520 msgid "Field is required." 511 521 msgstr "" 512 522 513 #: app/Http/Entities/Service.php:62 523 #: app/Http/Entities/Service.php:45 524 #: app/Support/Widgets/ElementorWidget.php:105 525 #: react/build/79.60f8a3c25a3089f47e58.js:1 526 msgid "Service" 527 msgstr "" 528 529 #: app/Http/Entities/Service.php:71 514 530 msgid "Duration invalid. Please enter a valid number that is a multiple of your selected timeframe." 515 531 msgstr "" 516 532 517 #: app/Http/Entities/Service.php: 63533 #: app/Http/Entities/Service.php:72 518 534 msgid "Duration invalid. Please enter a valid number between 5 and 1435." 519 535 msgstr "" 520 536 521 #: app/Http/Entities/ServiceProvider.php:65 537 #: app/Http/Entities/ServiceProvider.php:48 538 #: app/Support/Widgets/ElementorWidget.php:121 539 #: react/build/79.60f8a3c25a3089f47e58.js:1 540 msgid "Service Provider" 541 msgstr "" 542 543 #: app/Http/Entities/ServiceProvider.php:74 522 544 msgid "Phone format invalid. Please enter a valid phone number with country code (e.g., +31 123 456 789)" 523 545 msgstr "" 524 546 525 #: app/Http/Entities/ServiceProvider.php: 66547 #: app/Http/Entities/ServiceProvider.php:75 526 548 msgid "Phone format invalid. Please enter a valid phone number without using letters." 527 549 msgstr "" 528 550 529 #: app/Http/Entities/ServiceProvider.php: 69530 #: app/Http/Entities/ServiceProvider.php:7 0531 #: app/Http/Entities/ServiceProvider.php: 71551 #: app/Http/Entities/ServiceProvider.php:78 552 #: app/Http/Entities/ServiceProvider.php:79 553 #: app/Http/Entities/ServiceProvider.php:80 532 554 msgid "The email address is invalid. Please verify your input and try again." 533 555 msgstr "" 534 556 535 #: app/Http/Entities/ServiceProvider.php: 72557 #: app/Http/Entities/ServiceProvider.php:81 536 558 msgid "The email address can only be changed once per day." 537 559 msgstr "" … … 545 567 msgstr "" 546 568 547 #: app/Support/Builders/WidgetScriptBuilder.php:2 48569 #: app/Support/Builders/WidgetScriptBuilder.php:255 548 570 msgid "This is a demo SimplyBook.me widget." 549 571 msgstr "" 550 572 551 573 #. translators: %1$s is the opening HTML tag, %2$s is the closing HTML tag 552 #: app/Support/Builders/WidgetScriptBuilder.php:2 53574 #: app/Support/Builders/WidgetScriptBuilder.php:260 553 575 msgid "You can configure the plugin settings to display your customized widget %1$shere%2$s." 554 576 msgstr "" 555 577 556 #: app/Support/Builders/WidgetScriptBuilder.php:26 0578 #: app/Support/Builders/WidgetScriptBuilder.php:267 557 579 msgid "Notice" 558 580 msgstr "" 559 581 560 #: app/Support/Widgets/ElementorWidget.php:3 6582 #: app/Support/Widgets/ElementorWidget.php:39 561 583 #: assets/block/build/index.js:1 562 584 #: assets/block/src/edit.js:157 … … 565 587 msgstr "" 566 588 567 #: app/Support/Widgets/ElementorWidget.php:6 3589 #: app/Support/Widgets/ElementorWidget.php:69 568 590 msgid "SimplyBook.me Settings" 569 591 msgstr "" 570 592 571 #: app/Support/Widgets/ElementorWidget.php:99 572 #: react/build/79.712c746b580f9980027a.js:1 573 msgid "Service" 574 msgstr "" 575 576 #: app/Support/Widgets/ElementorWidget.php:115 577 #: react/build/79.712c746b580f9980027a.js:1 578 msgid "Service Provider" 579 msgstr "" 580 581 #: app/Support/Widgets/ElementorWidget.php:136 593 #: app/Support/Widgets/ElementorWidget.php:141 582 594 msgid "Location" 583 595 msgstr "" 584 596 585 #: app/Support/Widgets/ElementorWidget.php:1 57597 #: app/Support/Widgets/ElementorWidget.php:161 586 598 msgid "Service Category" 587 599 msgstr "" 588 600 589 #: app/Support/Widgets/ElementorWidget.php:1 78601 #: app/Support/Widgets/ElementorWidget.php:182 590 602 msgid "Select a service" 591 603 msgstr "" 592 604 593 #: app/Support/Widgets/ElementorWidget.php:19 5605 #: app/Support/Widgets/ElementorWidget.php:199 594 606 msgid "Select a service provider" 595 607 msgstr "" 596 608 597 #: app/Support/Widgets/ElementorWidget.php:22 1609 #: app/Support/Widgets/ElementorWidget.php:225 598 610 msgid "Select a location" 599 611 msgstr "" 600 612 601 #: app/Support/Widgets/ElementorWidget.php:2 37613 #: app/Support/Widgets/ElementorWidget.php:241 602 614 msgid "Select a category" 603 615 msgstr "" 604 616 605 #: app/Support/Widgets/ElementorWidget.php:3 07617 #: app/Support/Widgets/ElementorWidget.php:311 606 618 msgid "Please log in to SimplyBook.me to use this widget." 607 619 msgstr "" 608 620 609 #: app/Support/Widgets/ElementorWidget.php:3 09621 #: app/Support/Widgets/ElementorWidget.php:313 610 622 msgid "Go to the SimplyBook.me dashboard" 611 623 msgstr "" … … 1753 1765 1754 1766 #: config/menus.php:24 1755 #: react/build/79. 712c746b580f9980027a.js:11767 #: react/build/79.60f8a3c25a3089f47e58.js:1 1756 1768 msgid "Service Providers" 1757 1769 msgstr "" … … 1778 1790 1779 1791 #: config/menus.php:71 1780 #: react/build/107. 00e9e978ad301065b8c0.js:11792 #: react/build/107.e36c77fdbbf228e1331a.js:1 1781 1793 msgid "Notifications" 1782 1794 msgstr "" … … 1787 1799 1788 1800 #: config/menus.php:81 1789 #: react/build/79. 712c746b580f9980027a.js:11801 #: react/build/79.60f8a3c25a3089f47e58.js:1 1790 1802 msgid "Bookings" 1791 1803 msgstr "" … … 1903 1915 #: assets/block/build/index.js:1 1904 1916 #: assets/block/src/setting.modal.js:75 1905 #: react/build/107. 00e9e978ad301065b8c0.js:11917 #: react/build/107.e36c77fdbbf228e1331a.js:1 1906 1918 #: react/build/809.c849f787f31f82f6d37b.js:1 1907 1919 #: react/src/components/Forms/FormFooter.jsx:116 … … 1929 1941 #: assets/block/build/index.js:1 1930 1942 #: assets/block/src/edit.js:81 1931 #: react/build/107. 00e9e978ad301065b8c0.js:11943 #: react/build/107.e36c77fdbbf228e1331a.js:1 1932 1944 #: react/build/809.c849f787f31f82f6d37b.js:1 1933 1945 #: assets/block/build/index.js:59 … … 1972 1984 1973 1985 #: react/build/18.dda60173f985be980376.js:1 1974 #: react/build/79. 712c746b580f9980027a.js:11975 #: react/build/107. 00e9e978ad301065b8c0.js:11986 #: react/build/79.60f8a3c25a3089f47e58.js:1 1987 #: react/build/107.e36c77fdbbf228e1331a.js:1 1976 1988 #: react/build/167.e823be3a69b27a68a9c9.js:1 1977 1989 #: react/build/249.307f4b603f01b9c80926.js:1 … … 1984 1996 1985 1997 #: react/build/18.dda60173f985be980376.js:1 1986 #: react/build/79. 712c746b580f9980027a.js:11987 #: react/build/107. 00e9e978ad301065b8c0.js:11998 #: react/build/79.60f8a3c25a3089f47e58.js:1 1999 #: react/build/107.e36c77fdbbf228e1331a.js:1 1988 2000 #: react/build/167.e823be3a69b27a68a9c9.js:1 1989 2001 #: react/build/249.307f4b603f01b9c80926.js:1 … … 1996 2008 1997 2009 #: react/build/18.dda60173f985be980376.js:1 1998 #: react/build/79. 712c746b580f9980027a.js:11999 #: react/build/107. 00e9e978ad301065b8c0.js:12010 #: react/build/79.60f8a3c25a3089f47e58.js:1 2011 #: react/build/107.e36c77fdbbf228e1331a.js:1 2000 2012 #: react/build/167.e823be3a69b27a68a9c9.js:1 2001 2013 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2008 2020 2009 2021 #: react/build/18.dda60173f985be980376.js:1 2010 #: react/build/79. 712c746b580f9980027a.js:12011 #: react/build/107. 00e9e978ad301065b8c0.js:12022 #: react/build/79.60f8a3c25a3089f47e58.js:1 2023 #: react/build/107.e36c77fdbbf228e1331a.js:1 2012 2024 #: react/build/167.e823be3a69b27a68a9c9.js:1 2013 2025 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2020 2032 2021 2033 #: react/build/18.dda60173f985be980376.js:1 2022 #: react/build/79. 712c746b580f9980027a.js:12023 #: react/build/107. 00e9e978ad301065b8c0.js:12034 #: react/build/79.60f8a3c25a3089f47e58.js:1 2035 #: react/build/107.e36c77fdbbf228e1331a.js:1 2024 2036 #: react/build/167.e823be3a69b27a68a9c9.js:1 2025 2037 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2034 2046 2035 2047 #: react/build/18.dda60173f985be980376.js:1 2036 #: react/build/107. 00e9e978ad301065b8c0.js:12048 #: react/build/107.e36c77fdbbf228e1331a.js:1 2037 2049 #: react/build/167.e823be3a69b27a68a9c9.js:1 2038 2050 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2044 2056 2045 2057 #: react/build/18.dda60173f985be980376.js:1 2046 #: react/build/107. 00e9e978ad301065b8c0.js:12058 #: react/build/107.e36c77fdbbf228e1331a.js:1 2047 2059 #: react/build/167.e823be3a69b27a68a9c9.js:1 2048 2060 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2054 2066 2055 2067 #: react/build/18.dda60173f985be980376.js:1 2056 #: react/build/107. 00e9e978ad301065b8c0.js:12068 #: react/build/107.e36c77fdbbf228e1331a.js:1 2057 2069 #: react/build/167.e823be3a69b27a68a9c9.js:1 2058 2070 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2064 2076 2065 2077 #: react/build/18.dda60173f985be980376.js:1 2066 #: react/build/107. 00e9e978ad301065b8c0.js:12078 #: react/build/107.e36c77fdbbf228e1331a.js:1 2067 2079 #: react/build/167.e823be3a69b27a68a9c9.js:1 2068 2080 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2074 2086 2075 2087 #: react/build/18.dda60173f985be980376.js:1 2076 #: react/build/107. 00e9e978ad301065b8c0.js:12088 #: react/build/107.e36c77fdbbf228e1331a.js:1 2077 2089 #: react/build/167.e823be3a69b27a68a9c9.js:1 2078 2090 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2084 2096 2085 2097 #: react/build/18.dda60173f985be980376.js:1 2086 #: react/build/107. 00e9e978ad301065b8c0.js:12098 #: react/build/107.e36c77fdbbf228e1331a.js:1 2087 2099 #: react/build/167.e823be3a69b27a68a9c9.js:1 2088 2100 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2094 2106 2095 2107 #: react/build/18.dda60173f985be980376.js:1 2096 #: react/build/107. 00e9e978ad301065b8c0.js:12108 #: react/build/107.e36c77fdbbf228e1331a.js:1 2097 2109 #: react/build/167.e823be3a69b27a68a9c9.js:1 2098 2110 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2104 2116 2105 2117 #: react/build/18.dda60173f985be980376.js:1 2106 #: react/build/107. 00e9e978ad301065b8c0.js:12118 #: react/build/107.e36c77fdbbf228e1331a.js:1 2107 2119 #: react/build/167.e823be3a69b27a68a9c9.js:1 2108 2120 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2114 2126 2115 2127 #: react/build/18.dda60173f985be980376.js:1 2116 #: react/build/107. 00e9e978ad301065b8c0.js:12128 #: react/build/107.e36c77fdbbf228e1331a.js:1 2117 2129 #: react/build/167.e823be3a69b27a68a9c9.js:1 2118 2130 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2125 2137 2126 2138 #: react/build/18.dda60173f985be980376.js:1 2127 #: react/build/107. 00e9e978ad301065b8c0.js:12139 #: react/build/107.e36c77fdbbf228e1331a.js:1 2128 2140 #: react/build/167.e823be3a69b27a68a9c9.js:1 2129 2141 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2136 2148 2137 2149 #: react/build/18.dda60173f985be980376.js:1 2138 #: react/build/107. 00e9e978ad301065b8c0.js:12150 #: react/build/107.e36c77fdbbf228e1331a.js:1 2139 2151 #: react/build/167.e823be3a69b27a68a9c9.js:1 2140 2152 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2147 2159 2148 2160 #: react/build/18.dda60173f985be980376.js:1 2149 #: react/build/107. 00e9e978ad301065b8c0.js:12161 #: react/build/107.e36c77fdbbf228e1331a.js:1 2150 2162 #: react/build/167.e823be3a69b27a68a9c9.js:1 2151 2163 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2158 2170 2159 2171 #: react/build/18.dda60173f985be980376.js:1 2160 #: react/build/107. 00e9e978ad301065b8c0.js:12172 #: react/build/107.e36c77fdbbf228e1331a.js:1 2161 2173 #: react/build/167.e823be3a69b27a68a9c9.js:1 2162 2174 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2169 2181 2170 2182 #: react/build/18.dda60173f985be980376.js:1 2171 #: react/build/79. 712c746b580f9980027a.js:12172 #: react/build/107. 00e9e978ad301065b8c0.js:12183 #: react/build/79.60f8a3c25a3089f47e58.js:1 2184 #: react/build/107.e36c77fdbbf228e1331a.js:1 2173 2185 #: react/build/167.e823be3a69b27a68a9c9.js:1 2174 2186 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2181 2193 2182 2194 #: react/build/18.dda60173f985be980376.js:1 2183 #: react/build/107. 00e9e978ad301065b8c0.js:12195 #: react/build/107.e36c77fdbbf228e1331a.js:1 2184 2196 #: react/build/167.e823be3a69b27a68a9c9.js:1 2185 2197 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2192 2204 2193 2205 #: react/build/18.dda60173f985be980376.js:1 2194 #: react/build/107. 00e9e978ad301065b8c0.js:12206 #: react/build/107.e36c77fdbbf228e1331a.js:1 2195 2207 #: react/build/167.e823be3a69b27a68a9c9.js:1 2196 2208 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2202 2214 2203 2215 #: react/build/18.dda60173f985be980376.js:1 2204 #: react/build/107. 00e9e978ad301065b8c0.js:12216 #: react/build/107.e36c77fdbbf228e1331a.js:1 2205 2217 #: react/build/167.e823be3a69b27a68a9c9.js:1 2206 2218 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2213 2225 #. Translators: %1$s and %2$s are placeholders for line breaks and bullet points 2214 2226 #: react/build/18.dda60173f985be980376.js:1 2215 #: react/build/107. 00e9e978ad301065b8c0.js:12227 #: react/build/107.e36c77fdbbf228e1331a.js:1 2216 2228 #: react/build/167.e823be3a69b27a68a9c9.js:1 2217 2229 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2224 2236 2225 2237 #: react/build/18.dda60173f985be980376.js:1 2226 #: react/build/107. 00e9e978ad301065b8c0.js:12238 #: react/build/107.e36c77fdbbf228e1331a.js:1 2227 2239 #: react/build/167.e823be3a69b27a68a9c9.js:1 2228 2240 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2236 2248 2237 2249 #: react/build/18.dda60173f985be980376.js:1 2238 #: react/build/107. 00e9e978ad301065b8c0.js:12250 #: react/build/107.e36c77fdbbf228e1331a.js:1 2239 2251 #: react/build/167.e823be3a69b27a68a9c9.js:1 2240 2252 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2247 2259 2248 2260 #: react/build/18.dda60173f985be980376.js:1 2249 #: react/build/107. 00e9e978ad301065b8c0.js:12261 #: react/build/107.e36c77fdbbf228e1331a.js:1 2250 2262 #: react/build/167.e823be3a69b27a68a9c9.js:1 2251 2263 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2257 2269 2258 2270 #: react/build/18.dda60173f985be980376.js:1 2259 #: react/build/107. 00e9e978ad301065b8c0.js:12271 #: react/build/107.e36c77fdbbf228e1331a.js:1 2260 2272 #: react/build/167.e823be3a69b27a68a9c9.js:1 2261 2273 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2267 2279 2268 2280 #: react/build/18.dda60173f985be980376.js:1 2269 #: react/build/107. 00e9e978ad301065b8c0.js:12281 #: react/build/107.e36c77fdbbf228e1331a.js:1 2270 2282 #: react/build/167.e823be3a69b27a68a9c9.js:1 2271 2283 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2277 2289 2278 2290 #: react/build/18.dda60173f985be980376.js:1 2279 #: react/build/107. 00e9e978ad301065b8c0.js:12291 #: react/build/107.e36c77fdbbf228e1331a.js:1 2280 2292 #: react/build/167.e823be3a69b27a68a9c9.js:1 2281 2293 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2287 2299 2288 2300 #: react/build/18.dda60173f985be980376.js:1 2289 #: react/build/107. 00e9e978ad301065b8c0.js:12301 #: react/build/107.e36c77fdbbf228e1331a.js:1 2290 2302 #: react/build/167.e823be3a69b27a68a9c9.js:1 2291 2303 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2297 2309 2298 2310 #: react/build/18.dda60173f985be980376.js:1 2299 #: react/build/79. 712c746b580f9980027a.js:12300 #: react/build/107. 00e9e978ad301065b8c0.js:12311 #: react/build/79.60f8a3c25a3089f47e58.js:1 2312 #: react/build/107.e36c77fdbbf228e1331a.js:1 2301 2313 #: react/build/167.e823be3a69b27a68a9c9.js:1 2302 2314 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2310 2322 2311 2323 #: react/build/18.dda60173f985be980376.js:1 2312 #: react/build/107. 00e9e978ad301065b8c0.js:12324 #: react/build/107.e36c77fdbbf228e1331a.js:1 2313 2325 #: react/build/167.e823be3a69b27a68a9c9.js:1 2314 2326 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2320 2332 2321 2333 #: react/build/18.dda60173f985be980376.js:1 2322 #: react/build/107. 00e9e978ad301065b8c0.js:12334 #: react/build/107.e36c77fdbbf228e1331a.js:1 2323 2335 #: react/build/167.e823be3a69b27a68a9c9.js:1 2324 2336 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2330 2342 2331 2343 #: react/build/18.dda60173f985be980376.js:1 2332 #: react/build/107. 00e9e978ad301065b8c0.js:12344 #: react/build/107.e36c77fdbbf228e1331a.js:1 2333 2345 #: react/build/167.e823be3a69b27a68a9c9.js:1 2334 2346 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2340 2352 2341 2353 #: react/build/18.dda60173f985be980376.js:1 2342 #: react/build/107. 00e9e978ad301065b8c0.js:12354 #: react/build/107.e36c77fdbbf228e1331a.js:1 2343 2355 #: react/build/167.e823be3a69b27a68a9c9.js:1 2344 2356 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2350 2362 2351 2363 #: react/build/18.dda60173f985be980376.js:1 2352 #: react/build/107. 00e9e978ad301065b8c0.js:12364 #: react/build/107.e36c77fdbbf228e1331a.js:1 2353 2365 #: react/build/167.e823be3a69b27a68a9c9.js:1 2354 2366 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2360 2372 2361 2373 #: react/build/18.dda60173f985be980376.js:1 2362 #: react/build/107. 00e9e978ad301065b8c0.js:12374 #: react/build/107.e36c77fdbbf228e1331a.js:1 2363 2375 #: react/build/167.e823be3a69b27a68a9c9.js:1 2364 2376 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2370 2382 2371 2383 #: react/build/18.dda60173f985be980376.js:1 2372 #: react/build/107. 00e9e978ad301065b8c0.js:12384 #: react/build/107.e36c77fdbbf228e1331a.js:1 2373 2385 #: react/build/167.e823be3a69b27a68a9c9.js:1 2374 2386 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2380 2392 2381 2393 #: react/build/18.dda60173f985be980376.js:1 2382 #: react/build/107. 00e9e978ad301065b8c0.js:12394 #: react/build/107.e36c77fdbbf228e1331a.js:1 2383 2395 #: react/build/167.e823be3a69b27a68a9c9.js:1 2384 2396 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2390 2402 2391 2403 #: react/build/18.dda60173f985be980376.js:1 2392 #: react/build/107. 00e9e978ad301065b8c0.js:12404 #: react/build/107.e36c77fdbbf228e1331a.js:1 2393 2405 #: react/build/167.e823be3a69b27a68a9c9.js:1 2394 2406 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2400 2412 2401 2413 #: react/build/18.dda60173f985be980376.js:1 2402 #: react/build/107. 00e9e978ad301065b8c0.js:12414 #: react/build/107.e36c77fdbbf228e1331a.js:1 2403 2415 #: react/build/167.e823be3a69b27a68a9c9.js:1 2404 2416 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2410 2422 2411 2423 #: react/build/18.dda60173f985be980376.js:1 2412 #: react/build/107. 00e9e978ad301065b8c0.js:12424 #: react/build/107.e36c77fdbbf228e1331a.js:1 2413 2425 #: react/build/167.e823be3a69b27a68a9c9.js:1 2414 2426 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2420 2432 2421 2433 #: react/build/18.dda60173f985be980376.js:1 2422 #: react/build/107. 00e9e978ad301065b8c0.js:12434 #: react/build/107.e36c77fdbbf228e1331a.js:1 2423 2435 #: react/build/167.e823be3a69b27a68a9c9.js:1 2424 2436 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2430 2442 2431 2443 #: react/build/18.dda60173f985be980376.js:1 2432 #: react/build/107. 00e9e978ad301065b8c0.js:12444 #: react/build/107.e36c77fdbbf228e1331a.js:1 2433 2445 #: react/build/167.e823be3a69b27a68a9c9.js:1 2434 2446 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2440 2452 2441 2453 #: react/build/18.dda60173f985be980376.js:1 2442 #: react/build/107. 00e9e978ad301065b8c0.js:12454 #: react/build/107.e36c77fdbbf228e1331a.js:1 2443 2455 #: react/build/167.e823be3a69b27a68a9c9.js:1 2444 2456 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2450 2462 2451 2463 #: react/build/18.dda60173f985be980376.js:1 2452 #: react/build/107. 00e9e978ad301065b8c0.js:12464 #: react/build/107.e36c77fdbbf228e1331a.js:1 2453 2465 #: react/build/167.e823be3a69b27a68a9c9.js:1 2454 2466 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2460 2472 2461 2473 #: react/build/18.dda60173f985be980376.js:1 2462 #: react/build/107. 00e9e978ad301065b8c0.js:12474 #: react/build/107.e36c77fdbbf228e1331a.js:1 2463 2475 #: react/build/167.e823be3a69b27a68a9c9.js:1 2464 2476 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2476 2488 2477 2489 #: react/build/18.dda60173f985be980376.js:1 2478 #: react/build/107. 00e9e978ad301065b8c0.js:12490 #: react/build/107.e36c77fdbbf228e1331a.js:1 2479 2491 #: react/build/167.e823be3a69b27a68a9c9.js:1 2480 2492 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2487 2499 2488 2500 #: react/build/18.dda60173f985be980376.js:1 2489 #: react/build/107. 00e9e978ad301065b8c0.js:12501 #: react/build/107.e36c77fdbbf228e1331a.js:1 2490 2502 #: react/build/167.e823be3a69b27a68a9c9.js:1 2491 2503 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2498 2510 2499 2511 #: react/build/18.dda60173f985be980376.js:1 2500 #: react/build/107. 00e9e978ad301065b8c0.js:12512 #: react/build/107.e36c77fdbbf228e1331a.js:1 2501 2513 #: react/build/167.e823be3a69b27a68a9c9.js:1 2502 2514 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2509 2521 2510 2522 #: react/build/18.dda60173f985be980376.js:1 2511 #: react/build/107. 00e9e978ad301065b8c0.js:12523 #: react/build/107.e36c77fdbbf228e1331a.js:1 2512 2524 #: react/build/167.e823be3a69b27a68a9c9.js:1 2513 2525 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2520 2532 2521 2533 #: react/build/18.dda60173f985be980376.js:1 2522 #: react/build/107. 00e9e978ad301065b8c0.js:12534 #: react/build/107.e36c77fdbbf228e1331a.js:1 2523 2535 #: react/build/167.e823be3a69b27a68a9c9.js:1 2524 2536 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2531 2543 2532 2544 #: react/build/18.dda60173f985be980376.js:1 2533 #: react/build/107. 00e9e978ad301065b8c0.js:12545 #: react/build/107.e36c77fdbbf228e1331a.js:1 2534 2546 #: react/build/167.e823be3a69b27a68a9c9.js:1 2535 2547 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2542 2554 2543 2555 #: react/build/18.dda60173f985be980376.js:1 2544 #: react/build/107. 00e9e978ad301065b8c0.js:12556 #: react/build/107.e36c77fdbbf228e1331a.js:1 2545 2557 #: react/build/167.e823be3a69b27a68a9c9.js:1 2546 2558 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2553 2565 2554 2566 #: react/build/18.dda60173f985be980376.js:1 2555 #: react/build/107. 00e9e978ad301065b8c0.js:12567 #: react/build/107.e36c77fdbbf228e1331a.js:1 2556 2568 #: react/build/167.e823be3a69b27a68a9c9.js:1 2557 2569 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2564 2576 2565 2577 #: react/build/18.dda60173f985be980376.js:1 2566 #: react/build/107. 00e9e978ad301065b8c0.js:12578 #: react/build/107.e36c77fdbbf228e1331a.js:1 2567 2579 #: react/build/167.e823be3a69b27a68a9c9.js:1 2568 2580 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2575 2587 2576 2588 #: react/build/18.dda60173f985be980376.js:1 2577 #: react/build/107. 00e9e978ad301065b8c0.js:12589 #: react/build/107.e36c77fdbbf228e1331a.js:1 2578 2590 #: react/build/167.e823be3a69b27a68a9c9.js:1 2579 2591 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2586 2598 2587 2599 #: react/build/18.dda60173f985be980376.js:1 2588 #: react/build/107. 00e9e978ad301065b8c0.js:12600 #: react/build/107.e36c77fdbbf228e1331a.js:1 2589 2601 #: react/build/167.e823be3a69b27a68a9c9.js:1 2590 2602 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2638 2650 2639 2651 #: react/build/18.dda60173f985be980376.js:1 2640 #: react/build/79. 712c746b580f9980027a.js:12641 #: react/build/107. 00e9e978ad301065b8c0.js:12652 #: react/build/79.60f8a3c25a3089f47e58.js:1 2653 #: react/build/107.e36c77fdbbf228e1331a.js:1 2642 2654 #: react/build/167.e823be3a69b27a68a9c9.js:1 2643 2655 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2651 2663 2652 2664 #: react/build/18.dda60173f985be980376.js:1 2653 #: react/build/79. 712c746b580f9980027a.js:12654 #: react/build/107. 00e9e978ad301065b8c0.js:12665 #: react/build/79.60f8a3c25a3089f47e58.js:1 2666 #: react/build/107.e36c77fdbbf228e1331a.js:1 2655 2667 #: react/build/167.e823be3a69b27a68a9c9.js:1 2656 2668 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2664 2676 2665 2677 #: react/build/18.dda60173f985be980376.js:1 2666 #: react/build/79. 712c746b580f9980027a.js:12667 #: react/build/107. 00e9e978ad301065b8c0.js:12678 #: react/build/79.60f8a3c25a3089f47e58.js:1 2679 #: react/build/107.e36c77fdbbf228e1331a.js:1 2668 2680 #: react/build/167.e823be3a69b27a68a9c9.js:1 2669 2681 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2677 2689 2678 2690 #: react/build/18.dda60173f985be980376.js:1 2679 #: react/build/79. 712c746b580f9980027a.js:12680 #: react/build/107. 00e9e978ad301065b8c0.js:12691 #: react/build/79.60f8a3c25a3089f47e58.js:1 2692 #: react/build/107.e36c77fdbbf228e1331a.js:1 2681 2693 #: react/build/167.e823be3a69b27a68a9c9.js:1 2682 2694 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2690 2702 2691 2703 #: react/build/18.dda60173f985be980376.js:1 2692 #: react/build/79. 712c746b580f9980027a.js:12693 #: react/build/107. 00e9e978ad301065b8c0.js:12704 #: react/build/79.60f8a3c25a3089f47e58.js:1 2705 #: react/build/107.e36c77fdbbf228e1331a.js:1 2694 2706 #: react/build/167.e823be3a69b27a68a9c9.js:1 2695 2707 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2703 2715 2704 2716 #: react/build/18.dda60173f985be980376.js:1 2705 #: react/build/79. 712c746b580f9980027a.js:12706 #: react/build/107. 00e9e978ad301065b8c0.js:12717 #: react/build/79.60f8a3c25a3089f47e58.js:1 2718 #: react/build/107.e36c77fdbbf228e1331a.js:1 2707 2719 #: react/build/167.e823be3a69b27a68a9c9.js:1 2708 2720 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2716 2728 2717 2729 #: react/build/18.dda60173f985be980376.js:1 2718 #: react/build/79. 712c746b580f9980027a.js:12719 #: react/build/107. 00e9e978ad301065b8c0.js:12730 #: react/build/79.60f8a3c25a3089f47e58.js:1 2731 #: react/build/107.e36c77fdbbf228e1331a.js:1 2720 2732 #: react/build/167.e823be3a69b27a68a9c9.js:1 2721 2733 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2729 2741 2730 2742 #: react/build/18.dda60173f985be980376.js:1 2731 #: react/build/79. 712c746b580f9980027a.js:12732 #: react/build/107. 00e9e978ad301065b8c0.js:12743 #: react/build/79.60f8a3c25a3089f47e58.js:1 2744 #: react/build/107.e36c77fdbbf228e1331a.js:1 2733 2745 #: react/build/167.e823be3a69b27a68a9c9.js:1 2734 2746 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2742 2754 2743 2755 #: react/build/18.dda60173f985be980376.js:1 2744 #: react/build/79. 712c746b580f9980027a.js:12745 #: react/build/107. 00e9e978ad301065b8c0.js:12756 #: react/build/79.60f8a3c25a3089f47e58.js:1 2757 #: react/build/107.e36c77fdbbf228e1331a.js:1 2746 2758 #: react/build/167.e823be3a69b27a68a9c9.js:1 2747 2759 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2755 2767 2756 2768 #: react/build/18.dda60173f985be980376.js:1 2757 #: react/build/79. 712c746b580f9980027a.js:12758 #: react/build/107. 00e9e978ad301065b8c0.js:12769 #: react/build/79.60f8a3c25a3089f47e58.js:1 2770 #: react/build/107.e36c77fdbbf228e1331a.js:1 2759 2771 #: react/build/167.e823be3a69b27a68a9c9.js:1 2760 2772 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2768 2780 2769 2781 #: react/build/18.dda60173f985be980376.js:1 2770 #: react/build/79. 712c746b580f9980027a.js:12771 #: react/build/107. 00e9e978ad301065b8c0.js:12782 #: react/build/79.60f8a3c25a3089f47e58.js:1 2783 #: react/build/107.e36c77fdbbf228e1331a.js:1 2772 2784 #: react/build/167.e823be3a69b27a68a9c9.js:1 2773 2785 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2781 2793 2782 2794 #: react/build/18.dda60173f985be980376.js:1 2783 #: react/build/79. 712c746b580f9980027a.js:12784 #: react/build/107. 00e9e978ad301065b8c0.js:12795 #: react/build/79.60f8a3c25a3089f47e58.js:1 2796 #: react/build/107.e36c77fdbbf228e1331a.js:1 2785 2797 #: react/build/167.e823be3a69b27a68a9c9.js:1 2786 2798 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2794 2806 2795 2807 #: react/build/18.dda60173f985be980376.js:1 2796 #: react/build/79. 712c746b580f9980027a.js:12797 #: react/build/107. 00e9e978ad301065b8c0.js:12808 #: react/build/79.60f8a3c25a3089f47e58.js:1 2809 #: react/build/107.e36c77fdbbf228e1331a.js:1 2798 2810 #: react/build/167.e823be3a69b27a68a9c9.js:1 2799 2811 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2807 2819 2808 2820 #: react/build/18.dda60173f985be980376.js:1 2809 #: react/build/79. 712c746b580f9980027a.js:12810 #: react/build/107. 00e9e978ad301065b8c0.js:12821 #: react/build/79.60f8a3c25a3089f47e58.js:1 2822 #: react/build/107.e36c77fdbbf228e1331a.js:1 2811 2823 #: react/build/167.e823be3a69b27a68a9c9.js:1 2812 2824 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2820 2832 2821 2833 #: react/build/18.dda60173f985be980376.js:1 2822 #: react/build/79. 712c746b580f9980027a.js:12823 #: react/build/107. 00e9e978ad301065b8c0.js:12834 #: react/build/79.60f8a3c25a3089f47e58.js:1 2835 #: react/build/107.e36c77fdbbf228e1331a.js:1 2824 2836 #: react/build/167.e823be3a69b27a68a9c9.js:1 2825 2837 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2833 2845 2834 2846 #: react/build/18.dda60173f985be980376.js:1 2835 #: react/build/79. 712c746b580f9980027a.js:12836 #: react/build/107. 00e9e978ad301065b8c0.js:12847 #: react/build/79.60f8a3c25a3089f47e58.js:1 2848 #: react/build/107.e36c77fdbbf228e1331a.js:1 2837 2849 #: react/build/167.e823be3a69b27a68a9c9.js:1 2838 2850 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2846 2858 2847 2859 #: react/build/18.dda60173f985be980376.js:1 2848 #: react/build/79. 712c746b580f9980027a.js:12849 #: react/build/107. 00e9e978ad301065b8c0.js:12860 #: react/build/79.60f8a3c25a3089f47e58.js:1 2861 #: react/build/107.e36c77fdbbf228e1331a.js:1 2850 2862 #: react/build/167.e823be3a69b27a68a9c9.js:1 2851 2863 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2859 2871 2860 2872 #: react/build/18.dda60173f985be980376.js:1 2861 #: react/build/79. 712c746b580f9980027a.js:12862 #: react/build/107. 00e9e978ad301065b8c0.js:12873 #: react/build/79.60f8a3c25a3089f47e58.js:1 2874 #: react/build/107.e36c77fdbbf228e1331a.js:1 2863 2875 #: react/build/167.e823be3a69b27a68a9c9.js:1 2864 2876 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2872 2884 2873 2885 #: react/build/18.dda60173f985be980376.js:1 2874 #: react/build/79. 712c746b580f9980027a.js:12875 #: react/build/107. 00e9e978ad301065b8c0.js:12886 #: react/build/79.60f8a3c25a3089f47e58.js:1 2887 #: react/build/107.e36c77fdbbf228e1331a.js:1 2876 2888 #: react/build/167.e823be3a69b27a68a9c9.js:1 2877 2889 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2885 2897 2886 2898 #: react/build/18.dda60173f985be980376.js:1 2887 #: react/build/79. 712c746b580f9980027a.js:12888 #: react/build/107. 00e9e978ad301065b8c0.js:12899 #: react/build/79.60f8a3c25a3089f47e58.js:1 2900 #: react/build/107.e36c77fdbbf228e1331a.js:1 2889 2901 #: react/build/167.e823be3a69b27a68a9c9.js:1 2890 2902 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2898 2910 2899 2911 #: react/build/18.dda60173f985be980376.js:1 2900 #: react/build/79. 712c746b580f9980027a.js:12901 #: react/build/107. 00e9e978ad301065b8c0.js:12912 #: react/build/79.60f8a3c25a3089f47e58.js:1 2913 #: react/build/107.e36c77fdbbf228e1331a.js:1 2902 2914 #: react/build/167.e823be3a69b27a68a9c9.js:1 2903 2915 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2911 2923 2912 2924 #: react/build/18.dda60173f985be980376.js:1 2913 #: react/build/79. 712c746b580f9980027a.js:12914 #: react/build/107. 00e9e978ad301065b8c0.js:12925 #: react/build/79.60f8a3c25a3089f47e58.js:1 2926 #: react/build/107.e36c77fdbbf228e1331a.js:1 2915 2927 #: react/build/167.e823be3a69b27a68a9c9.js:1 2916 2928 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2924 2936 2925 2937 #: react/build/18.dda60173f985be980376.js:1 2926 #: react/build/79. 712c746b580f9980027a.js:12927 #: react/build/107. 00e9e978ad301065b8c0.js:12938 #: react/build/79.60f8a3c25a3089f47e58.js:1 2939 #: react/build/107.e36c77fdbbf228e1331a.js:1 2928 2940 #: react/build/167.e823be3a69b27a68a9c9.js:1 2929 2941 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2937 2949 2938 2950 #: react/build/18.dda60173f985be980376.js:1 2939 #: react/build/79. 712c746b580f9980027a.js:12940 #: react/build/107. 00e9e978ad301065b8c0.js:12951 #: react/build/79.60f8a3c25a3089f47e58.js:1 2952 #: react/build/107.e36c77fdbbf228e1331a.js:1 2941 2953 #: react/build/167.e823be3a69b27a68a9c9.js:1 2942 2954 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2950 2962 2951 2963 #: react/build/18.dda60173f985be980376.js:1 2952 #: react/build/79. 712c746b580f9980027a.js:12953 #: react/build/107. 00e9e978ad301065b8c0.js:12964 #: react/build/79.60f8a3c25a3089f47e58.js:1 2965 #: react/build/107.e36c77fdbbf228e1331a.js:1 2954 2966 #: react/build/167.e823be3a69b27a68a9c9.js:1 2955 2967 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2963 2975 2964 2976 #: react/build/18.dda60173f985be980376.js:1 2965 #: react/build/79. 712c746b580f9980027a.js:12966 #: react/build/107. 00e9e978ad301065b8c0.js:12977 #: react/build/79.60f8a3c25a3089f47e58.js:1 2978 #: react/build/107.e36c77fdbbf228e1331a.js:1 2967 2979 #: react/build/167.e823be3a69b27a68a9c9.js:1 2968 2980 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2976 2988 2977 2989 #: react/build/18.dda60173f985be980376.js:1 2978 #: react/build/79. 712c746b580f9980027a.js:12979 #: react/build/107. 00e9e978ad301065b8c0.js:12990 #: react/build/79.60f8a3c25a3089f47e58.js:1 2991 #: react/build/107.e36c77fdbbf228e1331a.js:1 2980 2992 #: react/build/167.e823be3a69b27a68a9c9.js:1 2981 2993 #: react/build/249.307f4b603f01b9c80926.js:1 … … 2989 3001 2990 3002 #: react/build/18.dda60173f985be980376.js:1 2991 #: react/build/79. 712c746b580f9980027a.js:12992 #: react/build/107. 00e9e978ad301065b8c0.js:13003 #: react/build/79.60f8a3c25a3089f47e58.js:1 3004 #: react/build/107.e36c77fdbbf228e1331a.js:1 2993 3005 #: react/build/167.e823be3a69b27a68a9c9.js:1 2994 3006 #: react/build/249.307f4b603f01b9c80926.js:1 … … 3002 3014 3003 3015 #: react/build/18.dda60173f985be980376.js:1 3004 #: react/build/79. 712c746b580f9980027a.js:13005 #: react/build/107. 00e9e978ad301065b8c0.js:13016 #: react/build/79.60f8a3c25a3089f47e58.js:1 3017 #: react/build/107.e36c77fdbbf228e1331a.js:1 3006 3018 #: react/build/167.e823be3a69b27a68a9c9.js:1 3007 3019 #: react/build/249.307f4b603f01b9c80926.js:1 … … 3015 3027 3016 3028 #: react/build/18.dda60173f985be980376.js:1 3017 #: react/build/79. 712c746b580f9980027a.js:13018 #: react/build/107. 00e9e978ad301065b8c0.js:13029 #: react/build/79.60f8a3c25a3089f47e58.js:1 3030 #: react/build/107.e36c77fdbbf228e1331a.js:1 3019 3031 #: react/build/167.e823be3a69b27a68a9c9.js:1 3020 3032 #: react/build/249.307f4b603f01b9c80926.js:1 … … 3028 3040 3029 3041 #: react/build/18.dda60173f985be980376.js:1 3030 #: react/build/79. 712c746b580f9980027a.js:13031 #: react/build/107. 00e9e978ad301065b8c0.js:13042 #: react/build/79.60f8a3c25a3089f47e58.js:1 3043 #: react/build/107.e36c77fdbbf228e1331a.js:1 3032 3044 #: react/build/167.e823be3a69b27a68a9c9.js:1 3033 3045 #: react/build/249.307f4b603f01b9c80926.js:1 … … 3041 3053 3042 3054 #: react/build/18.dda60173f985be980376.js:1 3043 #: react/build/79. 712c746b580f9980027a.js:13044 #: react/build/107. 00e9e978ad301065b8c0.js:13055 #: react/build/79.60f8a3c25a3089f47e58.js:1 3056 #: react/build/107.e36c77fdbbf228e1331a.js:1 3045 3057 #: react/build/167.e823be3a69b27a68a9c9.js:1 3046 3058 #: react/build/249.307f4b603f01b9c80926.js:1 … … 3086 3098 msgstr "" 3087 3099 3088 #: react/build/79. 712c746b580f9980027a.js:13089 #: react/build/107. 00e9e978ad301065b8c0.js:13100 #: react/build/79.60f8a3c25a3089f47e58.js:1 3101 #: react/build/107.e36c77fdbbf228e1331a.js:1 3090 3102 #: react/build/809.c849f787f31f82f6d37b.js:1 3091 3103 #: react/build/843.f6b4fb618126e6186962.js:1 … … 3095 3107 msgstr "" 3096 3108 3097 #: react/build/79. 712c746b580f9980027a.js:13098 #: react/build/107. 00e9e978ad301065b8c0.js:13109 #: react/build/79.60f8a3c25a3089f47e58.js:1 3110 #: react/build/107.e36c77fdbbf228e1331a.js:1 3099 3111 msgid "Live Help" 3100 3112 msgstr "" 3101 3113 3102 #: react/build/79. 712c746b580f9980027a.js:13103 #: react/build/107. 00e9e978ad301065b8c0.js:13114 #: react/build/79.60f8a3c25a3089f47e58.js:1 3115 #: react/build/107.e36c77fdbbf228e1331a.js:1 3104 3116 msgid "days left" 3105 3117 msgstr "" 3106 3118 3107 #: react/build/79. 712c746b580f9980027a.js:13108 #: react/build/107. 00e9e978ad301065b8c0.js:13119 #: react/build/79.60f8a3c25a3089f47e58.js:1 3120 #: react/build/107.e36c77fdbbf228e1331a.js:1 3109 3121 msgid "Dashboard" 3110 3122 msgstr "" 3111 3123 3112 #: react/build/79. 712c746b580f9980027a.js:13113 #: react/build/107. 00e9e978ad301065b8c0.js:13124 #: react/build/79.60f8a3c25a3089f47e58.js:1 3125 #: react/build/107.e36c77fdbbf228e1331a.js:1 3114 3126 msgid "Clients" 3115 3127 msgstr "" 3116 3128 3117 #: react/build/79. 712c746b580f9980027a.js:13118 #: react/build/107. 00e9e978ad301065b8c0.js:13129 #: react/build/79.60f8a3c25a3089f47e58.js:1 3130 #: react/build/107.e36c77fdbbf228e1331a.js:1 3119 3131 msgid "Calendar" 3120 3132 msgstr "" 3121 3133 3122 #: react/build/79. 712c746b580f9980027a.js:13123 #: react/build/107. 00e9e978ad301065b8c0.js:13134 #: react/build/79.60f8a3c25a3089f47e58.js:1 3135 #: react/build/107.e36c77fdbbf228e1331a.js:1 3124 3136 msgid "Help Center" 3125 3137 msgstr "" 3126 3138 3127 #: react/build/79. 712c746b580f9980027a.js:13128 #: react/build/107. 00e9e978ad301065b8c0.js:13139 #: react/build/79.60f8a3c25a3089f47e58.js:1 3140 #: react/build/107.e36c77fdbbf228e1331a.js:1 3129 3141 msgid "is expired." 3130 3142 msgstr "" 3131 3143 3132 #: react/build/79. 712c746b580f9980027a.js:13144 #: react/build/79.60f8a3c25a3089f47e58.js:1 3133 3145 msgid "is expired" 3134 3146 msgstr "" 3135 3147 3136 #: react/build/79. 712c746b580f9980027a.js:13148 #: react/build/79.60f8a3c25a3089f47e58.js:1 3137 3149 msgid "Manage your bookings on the go with the Admin App!" 3138 3150 msgstr "" 3139 3151 3140 #: react/build/79. 712c746b580f9980027a.js:13152 #: react/build/79.60f8a3c25a3089f47e58.js:1 3141 3153 msgid "See new and upcoming bookings, access & contact your clients, send payment links (coming soon) & more with the Admin App." 3142 3154 msgstr "" 3143 3155 3144 #: react/build/79. 712c746b580f9980027a.js:13156 #: react/build/79.60f8a3c25a3089f47e58.js:1 3145 3157 msgid "Just scan one of these codes:" 3146 3158 msgstr "" 3147 3159 3148 #: react/build/79. 712c746b580f9980027a.js:13160 #: react/build/79.60f8a3c25a3089f47e58.js:1 3149 3161 msgid "Two QR Codes - left to the App Store and right to the Google Play Store pages of the Admin App" 3150 3162 msgstr "" 3151 3163 3152 #: react/build/79. 712c746b580f9980027a.js:13164 #: react/build/79.60f8a3c25a3089f47e58.js:1 3153 3165 msgid "Download on the App Store" 3154 3166 msgstr "" 3155 3167 3156 #: react/build/79. 712c746b580f9980027a.js:13168 #: react/build/79.60f8a3c25a3089f47e58.js:1 3157 3169 msgid "Get it on Google Play" 3158 3170 msgstr "" 3159 3171 3160 #: react/build/79. 712c746b580f9980027a.js:13172 #: react/build/79.60f8a3c25a3089f47e58.js:1 3161 3173 msgid "Two phones displaying pages of the Admin App" 3162 3174 msgstr "" 3163 3175 3164 #: react/build/79. 712c746b580f9980027a.js:13176 #: react/build/79.60f8a3c25a3089f47e58.js:1 3165 3177 msgid "No tasks available." 3166 3178 msgstr "" 3167 3179 3168 #: react/build/79. 712c746b580f9980027a.js:13180 #: react/build/79.60f8a3c25a3089f47e58.js:1 3169 3181 msgid "Loading tasks..." 3170 3182 msgstr "" 3171 3183 3172 #: react/build/79. 712c746b580f9980027a.js:13184 #: react/build/79.60f8a3c25a3089f47e58.js:1 3173 3185 msgid "Progress" 3174 3186 msgstr "" 3175 3187 3176 #: react/build/79. 712c746b580f9980027a.js:13188 #: react/build/79.60f8a3c25a3089f47e58.js:1 3177 3189 msgid "All tasks" 3178 3190 msgstr "" 3179 3191 3180 #: react/build/79. 712c746b580f9980027a.js:13192 #: react/build/79.60f8a3c25a3089f47e58.js:1 3181 3193 msgid "Remaining tasks" 3182 3194 msgstr "" 3183 3195 3184 #: react/build/79. 712c746b580f9980027a.js:13196 #: react/build/79.60f8a3c25a3089f47e58.js:1 3185 3197 msgid "You're all set! Great job!" 3186 3198 msgstr "" 3187 3199 3188 #: react/build/79. 712c746b580f9980027a.js:13200 #: react/build/79.60f8a3c25a3089f47e58.js:1 3189 3201 msgid "You're on your way. You still have %s task open." 3190 3202 msgid_plural "You're on your way. You still have %s tasks open." … … 3192 3204 msgstr[1] "" 3193 3205 3194 #: react/build/79. 712c746b580f9980027a.js:13206 #: react/build/79.60f8a3c25a3089f47e58.js:1 3195 3207 msgid "Not yet calculated" 3196 3208 msgstr "" 3197 3209 3198 #: react/build/79. 712c746b580f9980027a.js:13210 #: react/build/79.60f8a3c25a3089f47e58.js:1 3199 3211 msgid "Today" 3200 3212 msgstr "" 3201 3213 3202 #: react/build/79. 712c746b580f9980027a.js:13214 #: react/build/79.60f8a3c25a3089f47e58.js:1 3203 3215 msgid "This week" 3204 3216 msgstr "" 3205 3217 3206 #: react/build/79. 712c746b580f9980027a.js:13218 #: react/build/79.60f8a3c25a3089f47e58.js:1 3207 3219 msgid "Most popular" 3208 3220 msgstr "" 3209 3221 3210 #: react/build/79. 712c746b580f9980027a.js:13222 #: react/build/79.60f8a3c25a3089f47e58.js:1 3211 3223 msgid "Last 30 days" 3212 3224 msgstr "" 3213 3225 3214 #: react/build/79. 712c746b580f9980027a.js:13226 #: react/build/79.60f8a3c25a3089f47e58.js:1 3215 3227 msgid "View Bookings" 3216 3228 msgstr "" 3217 3229 3218 #: react/build/79. 712c746b580f9980027a.js:13230 #: react/build/79.60f8a3c25a3089f47e58.js:1 3219 3231 msgid "SMS Credits" 3220 3232 msgstr "" 3221 3233 3222 #: react/build/79. 712c746b580f9980027a.js:13234 #: react/build/79.60f8a3c25a3089f47e58.js:1 3223 3235 msgid "SMS Gateway" 3224 3236 msgstr "" 3225 3237 3226 #: react/build/79. 712c746b580f9980027a.js:13238 #: react/build/79.60f8a3c25a3089f47e58.js:1 3227 3239 msgid "Membership" 3228 3240 msgstr "" 3229 3241 3230 #: react/build/79. 712c746b580f9980027a.js:13242 #: react/build/79.60f8a3c25a3089f47e58.js:1 3231 3243 msgid "Paid Events" 3232 3244 msgstr "" 3233 3245 3234 #: react/build/79. 712c746b580f9980027a.js:13246 #: react/build/79.60f8a3c25a3089f47e58.js:1 3235 3247 msgid "Management" 3236 3248 msgstr "" 3237 3249 3238 #: react/build/79. 712c746b580f9980027a.js:13250 #: react/build/79.60f8a3c25a3089f47e58.js:1 3239 3251 msgid "Tips & Tricks" 3240 3252 msgstr "" 3241 3253 3242 #: react/build/79. 712c746b580f9980027a.js:13254 #: react/build/79.60f8a3c25a3089f47e58.js:1 3243 3255 msgid "View All" 3244 3256 msgstr "" 3245 3257 3246 #: react/build/79. 712c746b580f9980027a.js:13258 #: react/build/79.60f8a3c25a3089f47e58.js:1 3247 3259 msgid "Installed" 3248 3260 msgstr "" 3249 3261 3250 #: react/build/79. 712c746b580f9980027a.js:13262 #: react/build/79.60f8a3c25a3089f47e58.js:1 3251 3263 msgid "Install" 3252 3264 msgstr "" 3253 3265 3254 #: react/build/79. 712c746b580f9980027a.js:13266 #: react/build/79.60f8a3c25a3089f47e58.js:1 3255 3267 msgid "Activate" 3256 3268 msgstr "" 3257 3269 3258 #: react/build/79. 712c746b580f9980027a.js:13270 #: react/build/79.60f8a3c25a3089f47e58.js:1 3259 3271 msgid "Activating..." 3260 3272 msgstr "" 3261 3273 3262 #: react/build/79. 712c746b580f9980027a.js:13274 #: react/build/79.60f8a3c25a3089f47e58.js:1 3263 3275 msgid "Downloading..." 3264 3276 msgstr "" 3265 3277 3266 #: react/build/79. 712c746b580f9980027a.js:13278 #: react/build/79.60f8a3c25a3089f47e58.js:1 3267 3279 msgid "Other Plugins" 3268 3280 msgstr "" 3269 3281 3270 #: react/build/79. 712c746b580f9980027a.js:13282 #: react/build/79.60f8a3c25a3089f47e58.js:1 3271 3283 msgid "Loading..." 3272 3284 msgstr "" 3273 3285 3274 #: react/build/107. 00e9e978ad301065b8c0.js:13286 #: react/build/107.e36c77fdbbf228e1331a.js:1 3275 3287 #: react/src/components/Settings/SettingsMenu.jsx:18 3276 3288 msgid "Loading menu..." 3277 3289 msgstr "" 3278 3290 3279 #: react/build/107. 00e9e978ad301065b8c0.js:13291 #: react/build/107.e36c77fdbbf228e1331a.js:1 3280 3292 #: react/src/components/Settings/SettingsMenu.jsx:19 3281 3293 msgid "Error loading menu" 3282 3294 msgstr "" 3283 3295 3284 #: react/build/107. 00e9e978ad301065b8c0.js:13296 #: react/build/107.e36c77fdbbf228e1331a.js:1 3285 3297 #: react/src/components/Settings/SettingsMenu.jsx:20 3286 3298 msgid "No menu items available" 3287 3299 msgstr "" 3288 3300 3289 #: react/build/107. 00e9e978ad301065b8c0.js:13301 #: react/build/107.e36c77fdbbf228e1331a.js:1 3290 3302 msgid "You currently have no notifications." 3291 3303 msgstr "" 3292 3304 3293 #: react/build/107. 00e9e978ad301065b8c0.js:13305 #: react/build/107.e36c77fdbbf228e1331a.js:1 3294 3306 #: react/build/809.c849f787f31f82f6d37b.js:1 3295 3307 #: react/src/components/Forms/FormFooter.jsx:75 … … 3299 3311 msgstr "" 3300 3312 3301 #: react/build/107. 00e9e978ad301065b8c0.js:13313 #: react/build/107.e36c77fdbbf228e1331a.js:1 3302 3314 #: react/build/809.c849f787f31f82f6d37b.js:1 3303 3315 #: react/src/components/Forms/FormFooter.jsx:76 … … 3305 3317 msgstr "" 3306 3318 3307 #: react/build/107. 00e9e978ad301065b8c0.js:13319 #: react/build/107.e36c77fdbbf228e1331a.js:1 3308 3320 #: react/build/809.c849f787f31f82f6d37b.js:1 3309 3321 #: react/src/components/Forms/FormFooter.jsx:77 … … 3311 3323 msgstr "" 3312 3324 3313 #: react/build/107. 00e9e978ad301065b8c0.js:13325 #: react/build/107.e36c77fdbbf228e1331a.js:1 3314 3326 #: react/build/809.c849f787f31f82f6d37b.js:1 3315 3327 #: react/src/components/Forms/FormFooter.jsx:78 … … 3318 3330 msgstr "" 3319 3331 3320 #: react/build/107. 00e9e978ad301065b8c0.js:13332 #: react/build/107.e36c77fdbbf228e1331a.js:1 3321 3333 #: react/build/809.c849f787f31f82f6d37b.js:1 3322 3334 #: react/src/components/Forms/FormFooter.jsx:129 … … 3324 3336 msgstr "" 3325 3337 3326 #: react/build/107. 00e9e978ad301065b8c0.js:13338 #: react/build/107.e36c77fdbbf228e1331a.js:1 3327 3339 #: react/build/809.c849f787f31f82f6d37b.js:1 3328 3340 #: react/src/routes/settings/$settingsId.lazy.jsx:122 … … 3513 3525 msgstr "" 3514 3526 3515 #: react/build/index. 06dedeb0ffa6bee75473.js:13527 #: react/build/index.de95e7d8a76df3fe461b.js:1 3516 3528 #: react/src/components/Common/ErrorBoundary.jsx:44 3517 3529 msgid "Uh-oh! We stumbled upon an error." 3518 3530 msgstr "" 3519 3531 3520 #: react/build/index. 06dedeb0ffa6bee75473.js:13532 #: react/build/index.de95e7d8a76df3fe461b.js:1 3521 3533 #: react/src/components/Common/ErrorBoundary.jsx:59 3522 3534 msgid "Copied" 3523 3535 msgstr "" 3524 3536 3525 #: react/build/index. 06dedeb0ffa6bee75473.js:13537 #: react/build/index.de95e7d8a76df3fe461b.js:1 3526 3538 #: react/src/components/Common/ErrorBoundary.jsx:60 3527 3539 msgid "Copy Error" 3528 3540 msgstr "" 3529 3541 3530 #: react/build/index. 06dedeb0ffa6bee75473.js:13542 #: react/build/index.de95e7d8a76df3fe461b.js:1 3531 3543 #: react/src/components/Common/ErrorBoundary.jsx:64 3532 3544 msgid "We're sorry for the trouble. Please take a moment to report this issue on the WordPress forums so we can work on fixing it. Here’s how you can report the issue:" 3533 3545 msgstr "" 3534 3546 3535 #: react/build/index. 06dedeb0ffa6bee75473.js:13547 #: react/build/index.de95e7d8a76df3fe461b.js:1 3536 3548 #: react/src/components/Common/ErrorBoundary.jsx:72 3537 3549 msgid "Copy the error details by clicking the %s button above." 3538 3550 msgstr "" 3539 3551 3540 #: react/build/index. 06dedeb0ffa6bee75473.js:13552 #: react/build/index.de95e7d8a76df3fe461b.js:1 3541 3553 #: react/src/components/Common/ErrorBoundary.jsx:84 3542 3554 msgid "Navigate to the Support Forum." 3543 3555 msgstr "" 3544 3556 3545 #: react/build/index. 06dedeb0ffa6bee75473.js:13557 #: react/build/index.de95e7d8a76df3fe461b.js:1 3546 3558 #: react/src/components/Common/ErrorBoundary.jsx:88 3547 3559 msgid "If you haven’t already, log in to your WordPress.org account or create a new account." 3548 3560 msgstr "" 3549 3561 3550 #: react/build/index. 06dedeb0ffa6bee75473.js:13562 #: react/build/index.de95e7d8a76df3fe461b.js:1 3551 3563 #: react/src/components/Common/ErrorBoundary.jsx:95 3552 3564 msgid "Once logged in, click on %s under the SimplyBook.me forum." 3553 3565 msgstr "" 3554 3566 3555 #: react/build/index. 06dedeb0ffa6bee75473.js:13567 #: react/build/index.de95e7d8a76df3fe461b.js:1 3556 3568 #: react/src/components/Common/ErrorBoundary.jsx:104 3557 3569 msgid "Title: Mention %s along with a brief hint of the error." 3558 3570 msgstr "" 3559 3571 3560 #: react/build/index. 06dedeb0ffa6bee75473.js:13572 #: react/build/index.de95e7d8a76df3fe461b.js:1 3561 3573 #: react/src/components/Common/ErrorBoundary.jsx:112 3562 3574 msgid "Description: Paste the copied error details and explain what you were doing when the error occurred." 3563 3575 msgstr "" 3564 3576 3565 #: react/build/index. 06dedeb0ffa6bee75473.js:13577 #: react/build/index.de95e7d8a76df3fe461b.js:1 3566 3578 #: react/src/components/Common/ErrorBoundary.jsx:119 3567 3579 msgid "Click %s to post your topic. Our team will look into the issue and provide assistance." -
simplybook/trunk/bootstrap/App.php
r3384996 r3399722 12 12 * codebase easier to test and maintain. 13 13 * 14 * @property-read \SimplyBook\Support\Helpers\Storage config {@see \SimplyBook\Providers\ConfigServiceProvider::provideConfig} 15 * @property-read \SimplyBook\Support\Helpers\Storage env {@see \SimplyBook\Providers\ConfigServiceProvider::provideEnv} 16 * @property-read \SimplyBook\Support\Helpers\Storage request {@see \SimplyBook\Providers\RequestServiceProvider::provideRequest} 17 * @property-read \SimplyBook\Support\Helpers\Storage files {@see \SimplyBook\Providers\RequestServiceProvider::provideFiles} 18 * @property-read \SimplyBook\Http\ApiClient client {@see \SimplyBook\Providers\ClientServiceProvider::provideClient} 14 * @property-read \SimplyBook\Support\Helpers\Storage $config {@see \SimplyBook\Providers\ConfigServiceProvider::provideConfig} 15 * @method static \SimplyBook\Support\Helpers\Storage config() 16 * @property-read \SimplyBook\Support\Helpers\Storage $env {@see \SimplyBook\Providers\ConfigServiceProvider::provideEnv} 17 * @method static \SimplyBook\Support\Helpers\Storage env() 18 * @property-read \SimplyBook\Support\Helpers\Storage $request {@see \SimplyBook\Providers\RequestServiceProvider::provideRequest} 19 * @method static \SimplyBook\Support\Helpers\Storage request() 20 * @property-read \SimplyBook\Support\Helpers\Storage $files {@see \SimplyBook\Providers\RequestServiceProvider::provideFiles} 21 * @method static \SimplyBook\Support\Helpers\Storage files() 22 * @property-read \SimplyBook\Http\ApiClient $client {@see \SimplyBook\Providers\ClientServiceProvider::provideClient} 23 * @method static \SimplyBook\Http\ApiClient client() 19 24 */ 20 25 class App … … 29 34 * Registry of service factories indexed by identifier. Allows registering 30 35 * lazy factory closures for services. 31 * 32 * @var array<string, \Closure> 36 * @var array<string, \Closure> $registry 33 37 */ 34 38 private array $registry = []; … … 37 41 * Instances of resolved services, indexed by identifier. Used to prevent 38 42 * multiple instantiations and store created services. 43 * @var array<string, object> $instances 39 44 */ 40 45 private array $instances = []; … … 72 77 73 78 /** 74 * Resolve an identifier to a n objectinstance. It first checks the registry79 * Resolve an identifier to a mixed instance. It first checks the registry 75 80 * for a factory. If none is found, it calls {@see make} to perform 76 81 * constructor autowiring. 77 82 * 83 * @param class-string $class 84 * @return mixed 78 85 * @throws \Exception If the target is not instantiable or cannot resolve a dependency. 79 86 * @throws \ReflectionException If reflection fails. 80 87 */ 81 public function get(string $class) : object88 public function get(string $class) 82 89 { 83 90 // Makes sure we memoize the Closure responses … … 105 112 * choose to register manually. 106 113 * 107 * @param string $class The class to make. Dependencies are injected.114 * @param class-string $class The class to make. Dependencies are injected. 108 115 * @param bool $register Made classes are registered in the container on 109 116 * true. Useful for optimization on multi-used classes. … … 172 179 } 173 180 181 /** @var class-string $dependencyClass */ 174 182 $dependencyClass = $type->getName(); 175 183 … … 221 229 * 222 230 * Instead of: 223 * App::config->getString('env.plugin.name'); 231 * App::getInstance()->config->getString('env.plugin.name'); 232 * 233 * @param list<mixed> $arguments 234 * @return mixed 235 * @throws \ReflectionException 224 236 */ 225 237 public static function __callStatic(string $name, array $arguments = []) 226 238 { 227 $instance = self::getInstance(); 228 return call_user_func([$instance, 'get'], $name); 239 return self::getInstance()->get($name); 229 240 } 230 241 } -
simplybook/trunk/bootstrap/Plugin.php
r3384996 r3399722 10 10 use SimplyBook\Managers\ControllerManager; 11 11 12 class Plugin12 final class Plugin 13 13 { 14 14 private App $app; … … 34 34 * Boot the plugin 35 35 */ 36 public function boot() 36 public function boot(): void 37 37 { 38 38 $this->registerEnvironment(); … … 58 58 * See {@see config/environment.php} for the actual values. 59 59 */ 60 public function registerEnvironment() 60 public function registerEnvironment(): void 61 61 { 62 62 if (!defined('SIMPLYBOOK_ENV')) { … … 68 68 * Load the plugin text domain for translations 69 69 */ 70 public function loadPluginTextDomain() 70 public function loadPluginTextDomain(): void 71 71 { 72 72 load_plugin_textdomain('simplybook'); … … 78 78 * used by {@see fireActivationHook} to run the activation hook only once. 79 79 */ 80 public function activation() 80 public function activation(): void 81 81 { 82 82 global $pagenow; … … 99 99 * activated. This method removes the flag after it has been used. 100 100 */ 101 public function fireActivationHook() 101 public function fireActivationHook(): void 102 102 { 103 103 if (get_option('simplybook_activation_flag', false) === false) { … … 120 120 * Method that fires on deactivation 121 121 */ 122 public function deactivation() 122 public function deactivation(): void 123 123 { 124 124 // Silence is golden … … 128 128 * Method that fires on uninstall 129 129 */ 130 public static function uninstall() 130 public static function uninstall(): void 131 131 { 132 132 $uninstallInstance = new \SimplyBook\Support\Helpers\Uninstall(); … … 141 141 * @uses do_action simplybook_providers_loaded 142 142 */ 143 public function registerProviders() 143 public function registerProviders(): void 144 144 { 145 145 $this->providerManager->register([ … … 155 155 * @uses do_action simplybook_controllers_loaded 156 156 */ 157 public function registerControllers() 157 public function registerControllers(): void 158 158 { 159 159 $this->controllerManager->register([ … … 179 179 * @uses do_action simplybook_endpoints_loaded 180 180 */ 181 public function registerEndpoints() 181 public function registerEndpoints(): void 182 182 { 183 183 $this->endpointManager->register([ -
simplybook/trunk/composer.json
r3384996 r3399722 1 1 { 2 2 "name": "really-simple-plugins/simplybookme", 3 "version": "3.2. 2.1",3 "version": "3.2.3", 4 4 "description": "Simply add a booking calendar to your site to schedule bookings, reservations, appointments and to collect payments.", 5 5 "type": "wordpress-plugin", … … 22 22 "require-dev": { 23 23 "phpcompatibility/php-compatibility": "^9.3", 24 "phpstan/extension-installer": "^1.4", 25 "phpstan/phpstan": "^2.1", 24 26 "slevomat/coding-standard": "^8.14", 25 "squizlabs/php_codesniffer": "^3.9" 27 "squizlabs/php_codesniffer": "^3.9", 28 "szepeviktor/phpstan-wordpress": "^2.0" 26 29 }, 27 30 "autoload": { … … 42 45 "allow-plugins": { 43 46 "automattic/jetpack-autoloader": true, 44 "dealerdirect/phpcodesniffer-composer-installer": true 47 "dealerdirect/phpcodesniffer-composer-installer": true, 48 "phpstan/extension-installer": true 45 49 } 46 50 }, … … 49 53 "lint:report": "vendor/bin/phpcs --report=full --report-file=phpcs-report.txt", 50 54 "lint:summary": "vendor/bin/phpcs --report=summary", 51 "line:summary:report": "vendor/bin/phpcs --report=summary --report-file=phpcs-report.txt" 55 "lint:summary:report": "vendor/bin/phpcs --report=summary --report-file=phpcs-report.txt", 56 "quality": "vendor/bin/phpstan analyse --memory-limit=2048M", 57 "quality:report": "vendor/bin/phpstan analyse --memory-limit=2048M > phpstan-report.txt", 58 "quality:diagnose": "vendor/bin/phpstan diagnose --memory-limit=2048M" 52 59 } 53 60 } -
simplybook/trunk/config/env.php
r3384996 r3399722 18 18 'plugin' => [ 19 19 'name' => 'SimplyBook.me', 20 'version' => '3.2. 2.1',20 'version' => '3.2.3', 21 21 'pro' => true, 22 22 'path' => dirname(__DIR__), … … 62 62 ], 63 63 ], 64 'black_friday' => [ 65 'discount_percentage' => 25, 66 'promo_code' => 'BLACKFRIDAY', 67 'start_date' => '2025-11-18', 68 'end_date' => '2025-11-29' 69 ], 64 70 'tips_and_tricks' => [ 65 71 'all' => 'https://simplybook.me/en/wordpress-booking-plugin', … … 67 73 'items' => [ 68 74 [ 69 'title' => 'Integrations', 70 'content' => 'Sync SimplyBook.me with Google Calendar or Outlook Calendar ', 75 'content' => 'How to get started', 76 'link' => 'https://help.simplybook.me/index.php/WordPress_integration', 77 ], 78 [ 79 'content' => 'Sync SimplyBook.me with Google Calendar or Outlook Calendar', 71 80 'link' => 'https://help.simplybook.me/index.php?title=Calendar_Sync_custom_feature', 72 81 ], 73 82 [ 74 'title' => 'Customization', 75 'content' => 'Accept Payments Online ', 83 'content' => 'How to accept payments with SimplyBook.me', 76 84 'link' => 'https://help.simplybook.me/index.php/Accept_payments_custom_feature', 77 85 ], 78 [79 'title' => 'Marketing',80 'content' => 'Boost Engagement with Promo Codes',81 'link' => 'https://help.simplybook.me/index.php?title=Coupons_and_Gift_Cards_custom_feature/en',82 ],83 // [84 // 'title' => 'Integrations',85 // 'content' => 'Sync SimplyBook.me with Google Calendar or Outlook Calendar – Keep your schedule updated in real time by integrating your bookings with Google and Outlook Calendar.',86 // 'link' => 'https://help.simplybook.me/index.php?title=Calendar_Sync_custom_feature ',87 // ],88 // [89 // 'title' => 'Automation',90 // 'content' => 'Reduce No-Shows with Automated Reminders – Set up SMS and email reminders to ensure your clients never miss an appointment.',91 // 'link' => '/settings/templates', // todo: use loginLink() method92 // ],93 // [94 // 'title' => 'News & Updates',95 // 'content' => 'SimplyBook.me newsletter: exciting new features and upcoming enhancements.',96 // 'link' => 'https://news.simplybook.me/ ',97 // ],98 // [99 // 'title' => 'Customization',100 // 'content' => 'Accept Payments Online – Enable secure payment gateways like Stripe or PayPal to allow clients to prepay for services.',101 // 'link' => 'https://help.simplybook.me/index.php/Accept_payments_custom_feature',102 // ],103 // [104 // 'title' => 'Client Management',105 // 'content' => 'Create Membership & Packages – Offer exclusive memberships and service packages to increase client retention and revenue.',106 // 'link' => 'https://help.simplybook.me/index.php?title=Packages_custom_feature/en',107 // ],108 // [109 // 'title' => 'Marketing',110 // 'content' => 'Boost Engagement with Promo Codes – Attract more clients by offering discounts and special promotions via customizable promo codes.',111 // 'link' => 'https://help.simplybook.me/index.php?title=Coupons_and_Gift_Cards_custom_feature/en',112 // ],113 86 ], 114 87 ], -
simplybook/trunk/config/fields/authentication.php
r3297362 r3399722 9 9 'type' => 'authentication', 10 10 'default' => get_option('simplybook_company_login'), 11 'label' => esc_html__('Currently logged in as', 'simplybook'),11 'label' => __('Currently logged in as', 'simplybook'), 12 12 'disabled' => true, 13 13 ], -
simplybook/trunk/config/related.php
r3313046 r3399722 14 14 'url' => 'https://wordpress.org/plugins/really-simple-ssl/', 15 15 'upgrade_url' => 'https://really-simple-ssl.com/pro?src=simplybook-plugin', 16 'title' => "Really Simple Security - " . esc_html__("Lightweight plugin. Heavyweight security features.", "simplybook" ),16 'title' => "Really Simple Security - " . __("Lightweight plugin. Heavyweight security features.", "simplybook" ), 17 17 'color' => '#f4bf3e' 18 18 ], … … 26 26 'url' => 'https://wordpress.org/plugins/complianz-gdpr/', 27 27 'upgrade_url' => 'https://complianz.io?src=simplybook-plugin', 28 'title' => 'Complianz - ' . esc_html__('Consent Management as it should be', 'simplybook'),28 'title' => 'Complianz - ' . __('Consent Management as it should be', 'simplybook'), 29 29 'color' => '#009fff' 30 30 ], -
simplybook/trunk/readme.txt
r3384996 r3399722 89 89 90 90 == Changelog == 91 = 3.2.3 = 92 * Fixed: The "confirm email" step can no longer be skipped, preventing users from getting stuck. 93 * Fixed: Theme settings can now be fetched regardless of strict server settings. 94 * Fixed: Translations are no longer escaped multiple times, preventing display issues. 95 * Fixed: The custom block is now compatible with the Full Site Editor. 96 * Changed: The tips-and-tricks block has a new design for better readability. 97 * Changed: Code optimization to reduce load times. 98 91 99 = 3.2.2.1 = 92 100 * Fixed: Error on uninstall. -
simplybook/trunk/simplybook.php
r3384996 r3399722 11 11 * Plugin URI: https://help.simplybook.me/index.php?title=WordPress_integration 12 12 * Description: Simply add a booking calendar to your site to schedule bookings, reservations, appointments and to collect payments. 13 * Version: 3.2. 2.113 * Version: 3.2.3 14 14 * Requires at least: 6.6 15 15 * Requires PHP: 7.4 -
simplybook/trunk/vendor/autoload.php
r3384996 r3399722 23 23 require_once __DIR__ . '/composer/autoload_real.php'; 24 24 25 return ComposerAutoloaderInit 4da771cd22b8c54009c4aa526a77c26f::getLoader();25 return ComposerAutoloaderInit8d32913a8f1db8963f795cba5d373288::getLoader(); -
simplybook/trunk/vendor/autoload_packages.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/composer/autoload_classmap.php
r3381644 r3399722 150 150 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddMandatoryProviderTask' => $baseDir . '/app/Features/TaskManagement/Tasks/AddMandatoryProviderTask.php', 151 151 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddMandatoryServiceTask' => $baseDir . '/app/Features/TaskManagement/Tasks/AddMandatoryServiceTask.php', 152 'SimplyBook\\Features\\TaskManagement\\Tasks\\BlackFridayTask' => $baseDir . '/app/Features/TaskManagement/Tasks/BlackFridayTask.php', 152 153 'SimplyBook\\Features\\TaskManagement\\Tasks\\CustomizeDesignTask' => $baseDir . '/app/Features/TaskManagement/Tasks/CustomizeDesignTask.php', 153 154 'SimplyBook\\Features\\TaskManagement\\Tasks\\FailedAuthenticationTask' => $baseDir . '/app/Features/TaskManagement/Tasks/FailedAuthenticationTask.php', … … 169 170 'SimplyBook\\Http\\Endpoints\\LoginUrlEndpoint' => $baseDir . '/app/Http/Endpoints/LoginUrlEndpoint.php', 170 171 'SimplyBook\\Http\\Endpoints\\NoticesDismissEndpoint' => $baseDir . '/app/Http/Endpoints/NoticesDismissEndpoint.php', 171 'SimplyBook\\Http\\Endpoints\\ProvidersEndpoint' => $baseDir . '/app/Http/Endpoints/ProvidersEndpoint.php',172 172 'SimplyBook\\Http\\Endpoints\\PublicThemeListEndpoint' => $baseDir . '/app/Http/Endpoints/PublicThemeListEndpoint.php', 173 173 'SimplyBook\\Http\\Endpoints\\RelatedPluginEndpoints' => $baseDir . '/app/Http/Endpoints/RelatedPluginEndpoints.php', … … 185 185 'SimplyBook\\Http\\Entities\\Service' => $baseDir . '/app/Http/Entities/Service.php', 186 186 'SimplyBook\\Http\\Entities\\ServiceProvider' => $baseDir . '/app/Http/Entities/ServiceProvider.php', 187 'SimplyBook\\Http\\JsonRpcClient' => $baseDir . '/app/Http/JsonRpcClient.php',188 187 'SimplyBook\\Interfaces\\ControllerInterface' => $baseDir . '/app/Interfaces/ControllerInterface.php', 189 188 'SimplyBook\\Interfaces\\FeatureInterface' => $baseDir . '/app/Interfaces/FeatureInterface.php', … … 207 206 'SimplyBook\\Services\\LoginUrlService' => $baseDir . '/app/Services/LoginUrlService.php', 208 207 'SimplyBook\\Services\\NoticeDismissalService' => $baseDir . '/app/Services/NoticeDismissalService.php', 208 'SimplyBook\\Services\\PromotionService' => $baseDir . '/app/Services/PromotionService.php', 209 209 'SimplyBook\\Services\\RelatedPluginService' => $baseDir . '/app/Services/RelatedPluginService.php', 210 210 'SimplyBook\\Services\\StatisticsService' => $baseDir . '/app/Services/StatisticsService.php', -
simplybook/trunk/vendor/composer/autoload_real.php
r3384996 r3399722 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 4da771cd22b8c54009c4aa526a77c26f5 class ComposerAutoloaderInit8d32913a8f1db8963f795cba5d373288 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 4da771cd22b8c54009c4aa526a77c26f', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit8d32913a8f1db8963f795cba5d373288', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 4da771cd22b8c54009c4aa526a77c26f', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit8d32913a8f1db8963f795cba5d373288', 'loadClassLoader')); 30 30 31 31 require __DIR__ . '/autoload_static.php'; 32 call_user_func(\Composer\Autoload\ComposerStaticInit 4da771cd22b8c54009c4aa526a77c26f::getInitializer($loader));32 call_user_func(\Composer\Autoload\ComposerStaticInit8d32913a8f1db8963f795cba5d373288::getInitializer($loader)); 33 33 34 34 $loader->register(true); 35 35 36 $filesToLoad = \Composer\Autoload\ComposerStaticInit 4da771cd22b8c54009c4aa526a77c26f::$files;36 $filesToLoad = \Composer\Autoload\ComposerStaticInit8d32913a8f1db8963f795cba5d373288::$files; 37 37 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { 38 38 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
simplybook/trunk/vendor/composer/autoload_static.php
r3384996 r3399722 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit 4da771cd22b8c54009c4aa526a77c26f7 class ComposerStaticInit8d32913a8f1db8963f795cba5d373288 8 8 { 9 9 public static $files = array ( … … 233 233 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddMandatoryProviderTask' => __DIR__ . '/../..' . '/app/Features/TaskManagement/Tasks/AddMandatoryProviderTask.php', 234 234 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddMandatoryServiceTask' => __DIR__ . '/../..' . '/app/Features/TaskManagement/Tasks/AddMandatoryServiceTask.php', 235 'SimplyBook\\Features\\TaskManagement\\Tasks\\BlackFridayTask' => __DIR__ . '/../..' . '/app/Features/TaskManagement/Tasks/BlackFridayTask.php', 235 236 'SimplyBook\\Features\\TaskManagement\\Tasks\\CustomizeDesignTask' => __DIR__ . '/../..' . '/app/Features/TaskManagement/Tasks/CustomizeDesignTask.php', 236 237 'SimplyBook\\Features\\TaskManagement\\Tasks\\FailedAuthenticationTask' => __DIR__ . '/../..' . '/app/Features/TaskManagement/Tasks/FailedAuthenticationTask.php', … … 252 253 'SimplyBook\\Http\\Endpoints\\LoginUrlEndpoint' => __DIR__ . '/../..' . '/app/Http/Endpoints/LoginUrlEndpoint.php', 253 254 'SimplyBook\\Http\\Endpoints\\NoticesDismissEndpoint' => __DIR__ . '/../..' . '/app/Http/Endpoints/NoticesDismissEndpoint.php', 254 'SimplyBook\\Http\\Endpoints\\ProvidersEndpoint' => __DIR__ . '/../..' . '/app/Http/Endpoints/ProvidersEndpoint.php',255 255 'SimplyBook\\Http\\Endpoints\\PublicThemeListEndpoint' => __DIR__ . '/../..' . '/app/Http/Endpoints/PublicThemeListEndpoint.php', 256 256 'SimplyBook\\Http\\Endpoints\\RelatedPluginEndpoints' => __DIR__ . '/../..' . '/app/Http/Endpoints/RelatedPluginEndpoints.php', … … 268 268 'SimplyBook\\Http\\Entities\\Service' => __DIR__ . '/../..' . '/app/Http/Entities/Service.php', 269 269 'SimplyBook\\Http\\Entities\\ServiceProvider' => __DIR__ . '/../..' . '/app/Http/Entities/ServiceProvider.php', 270 'SimplyBook\\Http\\JsonRpcClient' => __DIR__ . '/../..' . '/app/Http/JsonRpcClient.php',271 270 'SimplyBook\\Interfaces\\ControllerInterface' => __DIR__ . '/../..' . '/app/Interfaces/ControllerInterface.php', 272 271 'SimplyBook\\Interfaces\\FeatureInterface' => __DIR__ . '/../..' . '/app/Interfaces/FeatureInterface.php', … … 290 289 'SimplyBook\\Services\\LoginUrlService' => __DIR__ . '/../..' . '/app/Services/LoginUrlService.php', 291 290 'SimplyBook\\Services\\NoticeDismissalService' => __DIR__ . '/../..' . '/app/Services/NoticeDismissalService.php', 291 'SimplyBook\\Services\\PromotionService' => __DIR__ . '/../..' . '/app/Services/PromotionService.php', 292 292 'SimplyBook\\Services\\RelatedPluginService' => __DIR__ . '/../..' . '/app/Services/RelatedPluginService.php', 293 293 'SimplyBook\\Services\\StatisticsService' => __DIR__ . '/../..' . '/app/Services/StatisticsService.php', … … 419 419 { 420 420 return \Closure::bind(function () use ($loader) { 421 $loader->prefixLengthsPsr4 = ComposerStaticInit 4da771cd22b8c54009c4aa526a77c26f::$prefixLengthsPsr4;422 $loader->prefixDirsPsr4 = ComposerStaticInit 4da771cd22b8c54009c4aa526a77c26f::$prefixDirsPsr4;423 $loader->classMap = ComposerStaticInit 4da771cd22b8c54009c4aa526a77c26f::$classMap;421 $loader->prefixLengthsPsr4 = ComposerStaticInit8d32913a8f1db8963f795cba5d373288::$prefixLengthsPsr4; 422 $loader->prefixDirsPsr4 = ComposerStaticInit8d32913a8f1db8963f795cba5d373288::$prefixDirsPsr4; 423 $loader->classMap = ComposerStaticInit8d32913a8f1db8963f795cba5d373288::$classMap; 424 424 425 425 }, null, ClassLoader::class); -
simplybook/trunk/vendor/composer/installed.php
r3384996 r3399722 2 2 'root' => array( 3 3 'name' => 'really-simple-plugins/simplybookme', 4 'pretty_version' => '3.2. 2.1',5 'version' => '3.2. 2.1',4 'pretty_version' => '3.2.3', 5 'version' => '3.2.3.0', 6 6 'reference' => null, 7 7 'type' => 'wordpress-plugin', … … 63 63 ), 64 64 'really-simple-plugins/simplybookme' => array( 65 'pretty_version' => '3.2. 2.1',66 'version' => '3.2. 2.1',65 'pretty_version' => '3.2.3', 66 'version' => '3.2.3.0', 67 67 'reference' => null, 68 68 'type' => 'wordpress-plugin', -
simplybook/trunk/vendor/composer/jetpack_autoload_classmap.php
r3384996 r3399722 424 424 ), 425 425 'SimplyBook\\Bootstrap\\App' => array( 426 'version' => '3.2. 2.1',426 'version' => '3.2.3.0', 427 427 'path' => $baseDir . '/bootstrap/App.php' 428 428 ), 429 429 'SimplyBook\\Bootstrap\\Plugin' => array( 430 'version' => '3.2. 2.1',430 'version' => '3.2.3.0', 431 431 'path' => $baseDir . '/bootstrap/Plugin.php' 432 432 ), 433 433 'SimplyBook\\Controllers\\AdminController' => array( 434 'version' => '3.2. 2.1',434 'version' => '3.2.3.0', 435 435 'path' => $baseDir . '/app/Controllers/AdminController.php' 436 436 ), 437 437 'SimplyBook\\Controllers\\BlockController' => array( 438 'version' => '3.2. 2.1',438 'version' => '3.2.3.0', 439 439 'path' => $baseDir . '/app/Controllers/BlockController.php' 440 440 ), 441 441 'SimplyBook\\Controllers\\CapabilityController' => array( 442 'version' => '3.2. 2.1',442 'version' => '3.2.3.0', 443 443 'path' => $baseDir . '/app/Controllers/CapabilityController.php' 444 444 ), 445 445 'SimplyBook\\Controllers\\DashboardController' => array( 446 'version' => '3.2. 2.1',446 'version' => '3.2.3.0', 447 447 'path' => $baseDir . '/app/Controllers/DashboardController.php' 448 448 ), 449 449 'SimplyBook\\Controllers\\DesignSettingsController' => array( 450 'version' => '3.2. 2.1',450 'version' => '3.2.3.0', 451 451 'path' => $baseDir . '/app/Controllers/DesignSettingsController.php' 452 452 ), 453 453 'SimplyBook\\Controllers\\OnboardingNoticeController' => array( 454 'version' => '3.2. 2.1',454 'version' => '3.2.3.0', 455 455 'path' => $baseDir . '/app/Controllers/OnboardingNoticeController.php' 456 456 ), 457 457 'SimplyBook\\Controllers\\ReviewController' => array( 458 'version' => '3.2. 2.1',458 'version' => '3.2.3.0', 459 459 'path' => $baseDir . '/app/Controllers/ReviewController.php' 460 460 ), 461 461 'SimplyBook\\Controllers\\ScheduleController' => array( 462 'version' => '3.2. 2.1',462 'version' => '3.2.3.0', 463 463 'path' => $baseDir . '/app/Controllers/ScheduleController.php' 464 464 ), 465 465 'SimplyBook\\Controllers\\ServicesController' => array( 466 'version' => '3.2. 2.1',466 'version' => '3.2.3.0', 467 467 'path' => $baseDir . '/app/Controllers/ServicesController.php' 468 468 ), 469 469 'SimplyBook\\Controllers\\SettingsController' => array( 470 'version' => '3.2. 2.1',470 'version' => '3.2.3.0', 471 471 'path' => $baseDir . '/app/Controllers/SettingsController.php' 472 472 ), 473 473 'SimplyBook\\Controllers\\TrialExpirationController' => array( 474 'version' => '3.2. 2.1',474 'version' => '3.2.3.0', 475 475 'path' => $baseDir . '/app/Controllers/TrialExpirationController.php' 476 476 ), 477 477 'SimplyBook\\Controllers\\WidgetController' => array( 478 'version' => '3.2. 2.1',478 'version' => '3.2.3.0', 479 479 'path' => $baseDir . '/app/Controllers/WidgetController.php' 480 480 ), 481 481 'SimplyBook\\Controllers\\WidgetTrackingController' => array( 482 'version' => '3.2. 2.1',482 'version' => '3.2.3.0', 483 483 'path' => $baseDir . '/app/Controllers/WidgetTrackingController.php' 484 484 ), 485 485 'SimplyBook\\Exceptions\\ApiException' => array( 486 'version' => '3.2. 2.1',486 'version' => '3.2.3.0', 487 487 'path' => $baseDir . '/app/Exceptions/ApiException.php' 488 488 ), 489 489 'SimplyBook\\Exceptions\\BuilderException' => array( 490 'version' => '3.2. 2.1',490 'version' => '3.2.3.0', 491 491 'path' => $baseDir . '/app/Exceptions/BuilderException.php' 492 492 ), 493 493 'SimplyBook\\Exceptions\\EmptyResponseException' => array( 494 'version' => '3.2. 2.1',494 'version' => '3.2.3.0', 495 495 'path' => $baseDir . '/app/Exceptions/EmptyResponseException.php' 496 496 ), 497 497 'SimplyBook\\Exceptions\\FormException' => array( 498 'version' => '3.2. 2.1',498 'version' => '3.2.3.0', 499 499 'path' => $baseDir . '/app/Exceptions/FormException.php' 500 500 ), 501 501 'SimplyBook\\Exceptions\\RestDataException' => array( 502 'version' => '3.2. 2.1',502 'version' => '3.2.3.0', 503 503 'path' => $baseDir . '/app/Exceptions/RestDataException.php' 504 504 ), 505 505 'SimplyBook\\Exceptions\\SettingsException' => array( 506 'version' => '3.2. 2.1',506 'version' => '3.2.3.0', 507 507 'path' => $baseDir . '/app/Exceptions/SettingsException.php' 508 508 ), 509 509 'SimplyBook\\Features\\AbstractLoader' => array( 510 'version' => '3.2. 2.1',510 'version' => '3.2.3.0', 511 511 'path' => $baseDir . '/app/Features/AbstractLoader.php' 512 512 ), 513 513 'SimplyBook\\Features\\Notifications\\Notices\\AbstractNotice' => array( 514 'version' => '3.2. 2.1',514 'version' => '3.2.3.0', 515 515 'path' => $baseDir . '/app/Features/Notifications/Notices/AbstractNotice.php' 516 516 ), 517 517 'SimplyBook\\Features\\Notifications\\Notices\\AddMandatoryProviderNotice' => array( 518 'version' => '3.2. 2.1',518 'version' => '3.2.3.0', 519 519 'path' => $baseDir . '/app/Features/Notifications/Notices/AddMandatoryProviderNotice.php' 520 520 ), 521 521 'SimplyBook\\Features\\Notifications\\Notices\\AddMandatoryServiceNotice' => array( 522 'version' => '3.2. 2.1',522 'version' => '3.2.3.0', 523 523 'path' => $baseDir . '/app/Features/Notifications/Notices/AddMandatoryServiceNotice.php' 524 524 ), 525 525 'SimplyBook\\Features\\Notifications\\Notices\\FailedAuthenticationNotice' => array( 526 'version' => '3.2. 2.1',526 'version' => '3.2.3.0', 527 527 'path' => $baseDir . '/app/Features/Notifications/Notices/FailedAuthenticationNotice.php' 528 528 ), 529 529 'SimplyBook\\Features\\Notifications\\Notices\\MaxedOutProvidersNotice' => array( 530 'version' => '3.2. 2.1',530 'version' => '3.2.3.0', 531 531 'path' => $baseDir . '/app/Features/Notifications/Notices/MaxedOutProvidersNotice.php' 532 532 ), 533 533 'SimplyBook\\Features\\Notifications\\Notices\\MaxedOutServicesNotice' => array( 534 'version' => '3.2. 2.1',534 'version' => '3.2.3.0', 535 535 'path' => $baseDir . '/app/Features/Notifications/Notices/MaxedOutServicesNotice.php' 536 536 ), 537 537 'SimplyBook\\Features\\Notifications\\Notices\\PublishWidgetNotice' => array( 538 'version' => '3.2. 2.1',538 'version' => '3.2.3.0', 539 539 'path' => $baseDir . '/app/Features/Notifications/Notices/PublishWidgetNotice.php' 540 540 ), 541 541 'SimplyBook\\Features\\Notifications\\NotificationListener' => array( 542 'version' => '3.2. 2.1',542 'version' => '3.2.3.0', 543 543 'path' => $baseDir . '/app/Features/Notifications/NotificationListener.php' 544 544 ), 545 545 'SimplyBook\\Features\\Notifications\\NotificationsController' => array( 546 'version' => '3.2. 2.1',546 'version' => '3.2.3.0', 547 547 'path' => $baseDir . '/app/Features/Notifications/NotificationsController.php' 548 548 ), 549 549 'SimplyBook\\Features\\Notifications\\NotificationsEndpoints' => array( 550 'version' => '3.2. 2.1',550 'version' => '3.2.3.0', 551 551 'path' => $baseDir . '/app/Features/Notifications/NotificationsEndpoints.php' 552 552 ), 553 553 'SimplyBook\\Features\\Notifications\\NotificationsLoader' => array( 554 'version' => '3.2. 2.1',554 'version' => '3.2.3.0', 555 555 'path' => $baseDir . '/app/Features/Notifications/NotificationsLoader.php' 556 556 ), 557 557 'SimplyBook\\Features\\Notifications\\NotificationsRepository' => array( 558 'version' => '3.2. 2.1',558 'version' => '3.2.3.0', 559 559 'path' => $baseDir . '/app/Features/Notifications/NotificationsRepository.php' 560 560 ), 561 561 'SimplyBook\\Features\\Notifications\\NotificationsService' => array( 562 'version' => '3.2. 2.1',562 'version' => '3.2.3.0', 563 563 'path' => $baseDir . '/app/Features/Notifications/NotificationsService.php' 564 564 ), 565 565 'SimplyBook\\Features\\Onboarding\\OnboardingController' => array( 566 'version' => '3.2. 2.1',566 'version' => '3.2.3.0', 567 567 'path' => $baseDir . '/app/Features/Onboarding/OnboardingController.php' 568 568 ), 569 569 'SimplyBook\\Features\\Onboarding\\OnboardingLoader' => array( 570 'version' => '3.2. 2.1',570 'version' => '3.2.3.0', 571 571 'path' => $baseDir . '/app/Features/Onboarding/OnboardingLoader.php' 572 572 ), 573 573 'SimplyBook\\Features\\Onboarding\\OnboardingService' => array( 574 'version' => '3.2. 2.1',574 'version' => '3.2.3.0', 575 575 'path' => $baseDir . '/app/Features/Onboarding/OnboardingService.php' 576 576 ), 577 577 'SimplyBook\\Features\\TaskManagement\\TaskManagementController' => array( 578 'version' => '3.2. 2.1',578 'version' => '3.2.3.0', 579 579 'path' => $baseDir . '/app/Features/TaskManagement/TaskManagementController.php' 580 580 ), 581 581 'SimplyBook\\Features\\TaskManagement\\TaskManagementEndpoints' => array( 582 'version' => '3.2. 2.1',582 'version' => '3.2.3.0', 583 583 'path' => $baseDir . '/app/Features/TaskManagement/TaskManagementEndpoints.php' 584 584 ), 585 585 'SimplyBook\\Features\\TaskManagement\\TaskManagementListener' => array( 586 'version' => '3.2. 2.1',586 'version' => '3.2.3.0', 587 587 'path' => $baseDir . '/app/Features/TaskManagement/TaskManagementListener.php' 588 588 ), 589 589 'SimplyBook\\Features\\TaskManagement\\TaskManagementLoader' => array( 590 'version' => '3.2. 2.1',590 'version' => '3.2.3.0', 591 591 'path' => $baseDir . '/app/Features/TaskManagement/TaskManagementLoader.php' 592 592 ), 593 593 'SimplyBook\\Features\\TaskManagement\\TaskManagementRepository' => array( 594 'version' => '3.2. 2.1',594 'version' => '3.2.3.0', 595 595 'path' => $baseDir . '/app/Features/TaskManagement/TaskManagementRepository.php' 596 596 ), 597 597 'SimplyBook\\Features\\TaskManagement\\TaskManagementService' => array( 598 'version' => '3.2. 2.1',598 'version' => '3.2.3.0', 599 599 'path' => $baseDir . '/app/Features/TaskManagement/TaskManagementService.php' 600 600 ), 601 601 'SimplyBook\\Features\\TaskManagement\\Tasks\\AbstractTask' => array( 602 'version' => '3.2. 2.1',602 'version' => '3.2.3.0', 603 603 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/AbstractTask.php' 604 604 ), 605 605 'SimplyBook\\Features\\TaskManagement\\Tasks\\AcceptPaymentsTask' => array( 606 'version' => '3.2. 2.1',606 'version' => '3.2.3.0', 607 607 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/AcceptPaymentsTask.php' 608 608 ), 609 609 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddAllProvidersTask' => array( 610 'version' => '3.2. 2.1',610 'version' => '3.2.3.0', 611 611 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/AddAllProvidersTask.php' 612 612 ), 613 613 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddAllServicesTask' => array( 614 'version' => '3.2. 2.1',614 'version' => '3.2.3.0', 615 615 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/AddAllServicesTask.php' 616 616 ), 617 617 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddMandatoryProviderTask' => array( 618 'version' => '3.2. 2.1',618 'version' => '3.2.3.0', 619 619 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/AddMandatoryProviderTask.php' 620 620 ), 621 621 'SimplyBook\\Features\\TaskManagement\\Tasks\\AddMandatoryServiceTask' => array( 622 'version' => '3.2. 2.1',622 'version' => '3.2.3.0', 623 623 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/AddMandatoryServiceTask.php' 624 624 ), 625 'SimplyBook\\Features\\TaskManagement\\Tasks\\BlackFridayTask' => array( 626 'version' => '3.2.3.0', 627 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/BlackFridayTask.php' 628 ), 625 629 'SimplyBook\\Features\\TaskManagement\\Tasks\\CustomizeDesignTask' => array( 626 'version' => '3.2. 2.1',630 'version' => '3.2.3.0', 627 631 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/CustomizeDesignTask.php' 628 632 ), 629 633 'SimplyBook\\Features\\TaskManagement\\Tasks\\FailedAuthenticationTask' => array( 630 'version' => '3.2. 2.1',634 'version' => '3.2.3.0', 631 635 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/FailedAuthenticationTask.php' 632 636 ), 633 637 'SimplyBook\\Features\\TaskManagement\\Tasks\\GatherClientInfoTask' => array( 634 'version' => '3.2. 2.1',638 'version' => '3.2.3.0', 635 639 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/GatherClientInfoTask.php' 636 640 ), 637 641 'SimplyBook\\Features\\TaskManagement\\Tasks\\GoToSimplyBookSystemTask' => array( 638 'version' => '3.2. 2.1',642 'version' => '3.2.3.0', 639 643 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/GoToSimplyBookSystemTask.php' 640 644 ), 641 645 'SimplyBook\\Features\\TaskManagement\\Tasks\\InstallAppTask' => array( 642 'version' => '3.2. 2.1',646 'version' => '3.2.3.0', 643 647 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/InstallAppTask.php' 644 648 ), 645 649 'SimplyBook\\Features\\TaskManagement\\Tasks\\MaxedOutProvidersTask' => array( 646 'version' => '3.2. 2.1',650 'version' => '3.2.3.0', 647 651 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/MaxedOutProvidersTask.php' 648 652 ), 649 653 'SimplyBook\\Features\\TaskManagement\\Tasks\\MaximumBookingsTask' => array( 650 'version' => '3.2. 2.1',654 'version' => '3.2.3.0', 651 655 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/MaximumBookingsTask.php' 652 656 ), 653 657 'SimplyBook\\Features\\TaskManagement\\Tasks\\PostOnSocialMediaTask' => array( 654 'version' => '3.2. 2.1',658 'version' => '3.2.3.0', 655 659 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/PostOnSocialMediaTask.php' 656 660 ), 657 661 'SimplyBook\\Features\\TaskManagement\\Tasks\\PublishWidgetTask' => array( 658 'version' => '3.2. 2.1',662 'version' => '3.2.3.0', 659 663 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/PublishWidgetTask.php' 660 664 ), 661 665 'SimplyBook\\Features\\TaskManagement\\Tasks\\TrialExpiredTask' => array( 662 'version' => '3.2. 2.1',666 'version' => '3.2.3.0', 663 667 'path' => $baseDir . '/app/Features/TaskManagement/Tasks/TrialExpiredTask.php' 664 668 ), 665 669 'SimplyBook\\Http\\ApiClient' => array( 666 'version' => '3.2. 2.1',670 'version' => '3.2.3.0', 667 671 'path' => $baseDir . '/app/Http/ApiClient.php' 668 672 ), 669 673 'SimplyBook\\Http\\DTO\\ApiResponseDTO' => array( 670 'version' => '3.2. 2.1',674 'version' => '3.2.3.0', 671 675 'path' => $baseDir . '/app/Http/DTO/ApiResponseDTO.php' 672 676 ), 673 677 'SimplyBook\\Http\\Endpoints\\AbstractCrudEndpoint' => array( 674 'version' => '3.2. 2.1',678 'version' => '3.2.3.0', 675 679 'path' => $baseDir . '/app/Http/Endpoints/AbstractCrudEndpoint.php' 676 680 ), 677 681 'SimplyBook\\Http\\Endpoints\\BlockEndpoints' => array( 678 'version' => '3.2. 2.1',682 'version' => '3.2.3.0', 679 683 'path' => $baseDir . '/app/Http/Endpoints/BlockEndpoints.php' 680 684 ), 681 685 'SimplyBook\\Http\\Endpoints\\CompanyRegistrationEndpoint' => array( 682 'version' => '3.2. 2.1',686 'version' => '3.2.3.0', 683 687 'path' => $baseDir . '/app/Http/Endpoints/CompanyRegistrationEndpoint.php' 684 688 ), 685 689 'SimplyBook\\Http\\Endpoints\\DomainEndpoint' => array( 686 'version' => '3.2. 2.1',690 'version' => '3.2.3.0', 687 691 'path' => $baseDir . '/app/Http/Endpoints/DomainEndpoint.php' 688 692 ), 689 693 'SimplyBook\\Http\\Endpoints\\LogOutEndpoint' => array( 690 'version' => '3.2. 2.1',694 'version' => '3.2.3.0', 691 695 'path' => $baseDir . '/app/Http/Endpoints/LogOutEndpoint.php' 692 696 ), 693 697 'SimplyBook\\Http\\Endpoints\\LoginUrlEndpoint' => array( 694 'version' => '3.2. 2.1',698 'version' => '3.2.3.0', 695 699 'path' => $baseDir . '/app/Http/Endpoints/LoginUrlEndpoint.php' 696 700 ), 697 701 'SimplyBook\\Http\\Endpoints\\NoticesDismissEndpoint' => array( 698 'version' => '3.2. 2.1',702 'version' => '3.2.3.0', 699 703 'path' => $baseDir . '/app/Http/Endpoints/NoticesDismissEndpoint.php' 700 704 ), 701 'SimplyBook\\Http\\Endpoints\\ProvidersEndpoint' => array(702 'version' => '3.2.2.1',703 'path' => $baseDir . '/app/Http/Endpoints/ProvidersEndpoint.php'704 ),705 705 'SimplyBook\\Http\\Endpoints\\PublicThemeListEndpoint' => array( 706 'version' => '3.2. 2.1',706 'version' => '3.2.3.0', 707 707 'path' => $baseDir . '/app/Http/Endpoints/PublicThemeListEndpoint.php' 708 708 ), 709 709 'SimplyBook\\Http\\Endpoints\\RelatedPluginEndpoints' => array( 710 'version' => '3.2. 2.1',710 'version' => '3.2.3.0', 711 711 'path' => $baseDir . '/app/Http/Endpoints/RelatedPluginEndpoints.php' 712 712 ), 713 713 'SimplyBook\\Http\\Endpoints\\RemotePluginsEndpoint' => array( 714 'version' => '3.2. 2.1',714 'version' => '3.2.3.0', 715 715 'path' => $baseDir . '/app/Http/Endpoints/RemotePluginsEndpoint.php' 716 716 ), 717 717 'SimplyBook\\Http\\Endpoints\\ServicesEndpoint' => array( 718 'version' => '3.2. 2.1',718 'version' => '3.2.3.0', 719 719 'path' => $baseDir . '/app/Http/Endpoints/ServicesEndpoint.php' 720 720 ), 721 721 'SimplyBook\\Http\\Endpoints\\ServicesProvidersEndpoint' => array( 722 'version' => '3.2. 2.1',722 'version' => '3.2.3.0', 723 723 'path' => $baseDir . '/app/Http/Endpoints/ServicesProvidersEndpoint.php' 724 724 ), 725 725 'SimplyBook\\Http\\Endpoints\\SettingEndpoints' => array( 726 'version' => '3.2. 2.1',726 'version' => '3.2.3.0', 727 727 'path' => $baseDir . '/app/Http/Endpoints/SettingEndpoints.php' 728 728 ), 729 729 'SimplyBook\\Http\\Endpoints\\StatisticsEndpoint' => array( 730 'version' => '3.2. 2.1',730 'version' => '3.2.3.0', 731 731 'path' => $baseDir . '/app/Http/Endpoints/StatisticsEndpoint.php' 732 732 ), 733 733 'SimplyBook\\Http\\Endpoints\\SubscriptionEndpoints' => array( 734 'version' => '3.2. 2.1',734 'version' => '3.2.3.0', 735 735 'path' => $baseDir . '/app/Http/Endpoints/SubscriptionEndpoints.php' 736 736 ), 737 737 'SimplyBook\\Http\\Endpoints\\ThemeColorEndpoint' => array( 738 'version' => '3.2. 2.1',738 'version' => '3.2.3.0', 739 739 'path' => $baseDir . '/app/Http/Endpoints/ThemeColorEndpoint.php' 740 740 ), 741 741 'SimplyBook\\Http\\Endpoints\\TipsTricksEndpoint' => array( 742 'version' => '3.2. 2.1',742 'version' => '3.2.3.0', 743 743 'path' => $baseDir . '/app/Http/Endpoints/TipsTricksEndpoint.php' 744 744 ), 745 745 'SimplyBook\\Http\\Endpoints\\WaitForRegistrationEndpoint' => array( 746 'version' => '3.2. 2.1',746 'version' => '3.2.3.0', 747 747 'path' => $baseDir . '/app/Http/Endpoints/WaitForRegistrationEndpoint.php' 748 748 ), 749 749 'SimplyBook\\Http\\Endpoints\\WidgetEndpoint' => array( 750 'version' => '3.2. 2.1',750 'version' => '3.2.3.0', 751 751 'path' => $baseDir . '/app/Http/Endpoints/WidgetEndpoint.php' 752 752 ), 753 753 'SimplyBook\\Http\\Entities\\AbstractEntity' => array( 754 'version' => '3.2. 2.1',754 'version' => '3.2.3.0', 755 755 'path' => $baseDir . '/app/Http/Entities/AbstractEntity.php' 756 756 ), 757 757 'SimplyBook\\Http\\Entities\\Service' => array( 758 'version' => '3.2. 2.1',758 'version' => '3.2.3.0', 759 759 'path' => $baseDir . '/app/Http/Entities/Service.php' 760 760 ), 761 761 'SimplyBook\\Http\\Entities\\ServiceProvider' => array( 762 'version' => '3.2. 2.1',762 'version' => '3.2.3.0', 763 763 'path' => $baseDir . '/app/Http/Entities/ServiceProvider.php' 764 764 ), 765 'SimplyBook\\Http\\JsonRpcClient' => array(766 'version' => '3.2.2.1',767 'path' => $baseDir . '/app/Http/JsonRpcClient.php'768 ),769 765 'SimplyBook\\Interfaces\\ControllerInterface' => array( 770 'version' => '3.2. 2.1',766 'version' => '3.2.3.0', 771 767 'path' => $baseDir . '/app/Interfaces/ControllerInterface.php' 772 768 ), 773 769 'SimplyBook\\Interfaces\\FeatureInterface' => array( 774 'version' => '3.2. 2.1',770 'version' => '3.2.3.0', 775 771 'path' => $baseDir . '/app/Interfaces/FeatureInterface.php' 776 772 ), 777 773 'SimplyBook\\Interfaces\\MultiEndpointInterface' => array( 778 'version' => '3.2. 2.1',774 'version' => '3.2.3.0', 779 775 'path' => $baseDir . '/app/Interfaces/MultiEndpointInterface.php' 780 776 ), 781 777 'SimplyBook\\Interfaces\\NoticeInterface' => array( 782 'version' => '3.2. 2.1',778 'version' => '3.2.3.0', 783 779 'path' => $baseDir . '/app/Interfaces/NoticeInterface.php' 784 780 ), 785 781 'SimplyBook\\Interfaces\\ProviderInterface' => array( 786 'version' => '3.2. 2.1',782 'version' => '3.2.3.0', 787 783 'path' => $baseDir . '/app/Interfaces/ProviderInterface.php' 788 784 ), 789 785 'SimplyBook\\Interfaces\\SingleEndpointInterface' => array( 790 'version' => '3.2. 2.1',786 'version' => '3.2.3.0', 791 787 'path' => $baseDir . '/app/Interfaces/SingleEndpointInterface.php' 792 788 ), 793 789 'SimplyBook\\Interfaces\\TaskInterface' => array( 794 'version' => '3.2. 2.1',790 'version' => '3.2.3.0', 795 791 'path' => $baseDir . '/app/Interfaces/TaskInterface.php' 796 792 ), 797 793 'SimplyBook\\Managers\\AbstractManager' => array( 798 'version' => '3.2. 2.1',794 'version' => '3.2.3.0', 799 795 'path' => $baseDir . '/app/Managers/AbstractManager.php' 800 796 ), 801 797 'SimplyBook\\Managers\\ControllerManager' => array( 802 'version' => '3.2. 2.1',798 'version' => '3.2.3.0', 803 799 'path' => $baseDir . '/app/Managers/ControllerManager.php' 804 800 ), 805 801 'SimplyBook\\Managers\\EndpointManager' => array( 806 'version' => '3.2. 2.1',802 'version' => '3.2.3.0', 807 803 'path' => $baseDir . '/app/Managers/EndpointManager.php' 808 804 ), 809 805 'SimplyBook\\Managers\\FeatureManager' => array( 810 'version' => '3.2. 2.1',806 'version' => '3.2.3.0', 811 807 'path' => $baseDir . '/app/Managers/FeatureManager.php' 812 808 ), 813 809 'SimplyBook\\Managers\\ProviderManager' => array( 814 'version' => '3.2. 2.1',810 'version' => '3.2.3.0', 815 811 'path' => $baseDir . '/app/Managers/ProviderManager.php' 816 812 ), 817 813 'SimplyBook\\Providers\\ClientServiceProvider' => array( 818 'version' => '3.2. 2.1',814 'version' => '3.2.3.0', 819 815 'path' => $baseDir . '/app/Providers/ClientServiceProvider.php' 820 816 ), 821 817 'SimplyBook\\Providers\\ConfigServiceProvider' => array( 822 'version' => '3.2. 2.1',818 'version' => '3.2.3.0', 823 819 'path' => $baseDir . '/app/Providers/ConfigServiceProvider.php' 824 820 ), 825 821 'SimplyBook\\Providers\\Provider' => array( 826 'version' => '3.2. 2.1',822 'version' => '3.2.3.0', 827 823 'path' => $baseDir . '/app/Providers/Provider.php' 828 824 ), 829 825 'SimplyBook\\Providers\\RequestServiceProvider' => array( 830 'version' => '3.2. 2.1',826 'version' => '3.2.3.0', 831 827 'path' => $baseDir . '/app/Providers/RequestServiceProvider.php' 832 828 ), 833 829 'SimplyBook\\Services\\CallbackUrlService' => array( 834 'version' => '3.2. 2.1',830 'version' => '3.2.3.0', 835 831 'path' => $baseDir . '/app/Services/CallbackUrlService.php' 836 832 ), 837 833 'SimplyBook\\Services\\CapabilityService' => array( 838 'version' => '3.2. 2.1',834 'version' => '3.2.3.0', 839 835 'path' => $baseDir . '/app/Services/CapabilityService.php' 840 836 ), 841 837 'SimplyBook\\Services\\DesignSettingsService' => array( 842 'version' => '3.2. 2.1',838 'version' => '3.2.3.0', 843 839 'path' => $baseDir . '/app/Services/DesignSettingsService.php' 844 840 ), 845 841 'SimplyBook\\Services\\LoginUrlService' => array( 846 'version' => '3.2. 2.1',842 'version' => '3.2.3.0', 847 843 'path' => $baseDir . '/app/Services/LoginUrlService.php' 848 844 ), 849 845 'SimplyBook\\Services\\NoticeDismissalService' => array( 850 'version' => '3.2. 2.1',846 'version' => '3.2.3.0', 851 847 'path' => $baseDir . '/app/Services/NoticeDismissalService.php' 852 848 ), 849 'SimplyBook\\Services\\PromotionService' => array( 850 'version' => '3.2.3.0', 851 'path' => $baseDir . '/app/Services/PromotionService.php' 852 ), 853 853 'SimplyBook\\Services\\RelatedPluginService' => array( 854 'version' => '3.2. 2.1',854 'version' => '3.2.3.0', 855 855 'path' => $baseDir . '/app/Services/RelatedPluginService.php' 856 856 ), 857 857 'SimplyBook\\Services\\StatisticsService' => array( 858 'version' => '3.2. 2.1',858 'version' => '3.2.3.0', 859 859 'path' => $baseDir . '/app/Services/StatisticsService.php' 860 860 ), 861 861 'SimplyBook\\Services\\SubscriptionDataService' => array( 862 'version' => '3.2. 2.1',862 'version' => '3.2.3.0', 863 863 'path' => $baseDir . '/app/Services/SubscriptionDataService.php' 864 864 ), 865 865 'SimplyBook\\Services\\ThemeColorService' => array( 866 'version' => '3.2. 2.1',866 'version' => '3.2.3.0', 867 867 'path' => $baseDir . '/app/Services/ThemeColorService.php' 868 868 ), 869 869 'SimplyBook\\Services\\WidgetTrackingService' => array( 870 'version' => '3.2. 2.1',870 'version' => '3.2.3.0', 871 871 'path' => $baseDir . '/app/Services/WidgetTrackingService.php' 872 872 ), 873 873 'SimplyBook\\Support\\Builders\\CompanyBuilder' => array( 874 'version' => '3.2. 2.1',874 'version' => '3.2.3.0', 875 875 'path' => $baseDir . '/app/Support/Builders/CompanyBuilder.php' 876 876 ), 877 877 'SimplyBook\\Support\\Builders\\PageBuilder' => array( 878 'version' => '3.2. 2.1',878 'version' => '3.2.3.0', 879 879 'path' => $baseDir . '/app/Support/Builders/PageBuilder.php' 880 880 ), 881 881 'SimplyBook\\Support\\Builders\\WidgetScriptBuilder' => array( 882 'version' => '3.2. 2.1',882 'version' => '3.2.3.0', 883 883 'path' => $baseDir . '/app/Support/Builders/WidgetScriptBuilder.php' 884 884 ), 885 885 'SimplyBook\\Support\\Helpers\\Event' => array( 886 'version' => '3.2. 2.1',886 'version' => '3.2.3.0', 887 887 'path' => $baseDir . '/app/Support/Helpers/Event.php' 888 888 ), 889 889 'SimplyBook\\Support\\Helpers\\Request' => array( 890 'version' => '3.2. 2.1',890 'version' => '3.2.3.0', 891 891 'path' => $baseDir . '/app/Support/Helpers/Request.php' 892 892 ), 893 893 'SimplyBook\\Support\\Helpers\\Storage' => array( 894 'version' => '3.2. 2.1',894 'version' => '3.2.3.0', 895 895 'path' => $baseDir . '/app/Support/Helpers/Storage.php' 896 896 ), 897 897 'SimplyBook\\Support\\Helpers\\Uninstall' => array( 898 'version' => '3.2. 2.1',898 'version' => '3.2.3.0', 899 899 'path' => $baseDir . '/app/Support/Helpers/Uninstall.php' 900 900 ), 901 901 'SimplyBook\\Support\\Utility\\ColorUtility' => array( 902 'version' => '3.2. 2.1',902 'version' => '3.2.3.0', 903 903 'path' => $baseDir . '/app/Support/Utility/ColorUtility.php' 904 904 ), 905 905 'SimplyBook\\Support\\Utility\\StringUtility' => array( 906 'version' => '3.2. 2.1',906 'version' => '3.2.3.0', 907 907 'path' => $baseDir . '/app/Support/Utility/StringUtility.php' 908 908 ), 909 909 'SimplyBook\\Support\\Widgets\\ElementorWidget' => array( 910 'version' => '3.2. 2.1',910 'version' => '3.2.3.0', 911 911 'path' => $baseDir . '/app/Support/Widgets/ElementorWidget.php' 912 912 ), 913 913 'SimplyBook\\Traits\\HasAllowlistControl' => array( 914 'version' => '3.2. 2.1',914 'version' => '3.2.3.0', 915 915 'path' => $baseDir . '/app/Traits/HasAllowlistControl.php' 916 916 ), 917 917 'SimplyBook\\Traits\\HasApiAccess' => array( 918 'version' => '3.2. 2.1',918 'version' => '3.2.3.0', 919 919 'path' => $baseDir . '/app/Traits/HasApiAccess.php' 920 920 ), 921 921 'SimplyBook\\Traits\\HasEncryption' => array( 922 'version' => '3.2. 2.1',922 'version' => '3.2.3.0', 923 923 'path' => $baseDir . '/app/Traits/HasEncryption.php' 924 924 ), 925 925 'SimplyBook\\Traits\\HasLogging' => array( 926 'version' => '3.2. 2.1',926 'version' => '3.2.3.0', 927 927 'path' => $baseDir . '/app/Traits/HasLogging.php' 928 928 ), 929 929 'SimplyBook\\Traits\\HasNonces' => array( 930 'version' => '3.2. 2.1',930 'version' => '3.2.3.0', 931 931 'path' => $baseDir . '/app/Traits/HasNonces.php' 932 932 ), 933 933 'SimplyBook\\Traits\\HasRestAccess' => array( 934 'version' => '3.2. 2.1',934 'version' => '3.2.3.0', 935 935 'path' => $baseDir . '/app/Traits/HasRestAccess.php' 936 936 ), 937 937 'SimplyBook\\Traits\\HasTokenManagement' => array( 938 'version' => '3.2. 2.1',938 'version' => '3.2.3.0', 939 939 'path' => $baseDir . '/app/Traits/HasTokenManagement.php' 940 940 ), 941 941 'SimplyBook\\Traits\\HasUserAccess' => array( 942 'version' => '3.2. 2.1',942 'version' => '3.2.3.0', 943 943 'path' => $baseDir . '/app/Traits/HasUserAccess.php' 944 944 ), 945 945 'SimplyBook\\Traits\\HasViews' => array( 946 'version' => '3.2. 2.1',946 'version' => '3.2.3.0', 947 947 'path' => $baseDir . '/app/Traits/HasViews.php' 948 948 ), 949 949 'SimplyBook\\Traits\\LegacyLoad' => array( 950 'version' => '3.2. 2.1',950 'version' => '3.2.3.0', 951 951 'path' => $baseDir . '/app/Traits/LegacyLoad.php' 952 952 ), 953 953 'SimplyBook\\Traits\\LegacySave' => array( 954 'version' => '3.2. 2.1',954 'version' => '3.2.3.0', 955 955 'path' => $baseDir . '/app/Traits/LegacySave.php' 956 956 ), -
simplybook/trunk/vendor/composer/jetpack_autoload_filemap.php
r3384996 r3399722 28 28 ), 29 29 'dac67ee3b45b7fdd52cfb86981c8c3d0' => array( 30 'version' => '3.2. 2.1',30 'version' => '3.2.3.0', 31 31 'path' => $baseDir . '/helpers.php' 32 32 ), -
simplybook/trunk/vendor/jetpack-autoloader/class-autoloader-handler.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-autoloader-locator.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-autoloader.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-container.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-hook-manager.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-latest-autoloader-guard.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-manifest-reader.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-path-processor.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-php-autoloader.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-plugin-locator.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-plugins-handler.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-shutdown-handler.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-version-loader.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore -
simplybook/trunk/vendor/jetpack-autoloader/class-version-selector.php
r3384996 r3399722 6 6 */ 7 7 8 namespace Automattic\Jetpack\Autoloader\jp 4da771cd22b8c54009c4aa526a77c26f\al5_0_11;8 namespace Automattic\Jetpack\Autoloader\jp8d32913a8f1db8963f795cba5d373288\al5_0_11; 9 9 10 10 // phpcs:ignore
Note: See TracChangeset
for help on using the changeset viewer.